英特尔® AI DevCloud

免费云计算已向英特尔® AI Academy 成员提供。 使用英特尔® 至强® 可扩展处理器支持的英特尔® AI DevCloud,满足您的机器学习和深度学习训练及推理计算的需要。

请求访问

教授:获取对面向课堂的英特尔 AI DevCloud 的访问权限。 立即申请

利益

  • 30 天免费访问
  • 对批准的研究选题给予延长访问(最多达六个月)
  • 200 GB 的文件存储
  • 访问英特尔® 至强® 可扩展处理器的远程集群

支持

我们的团队在以下时间监督该社区论坛:周一至周五,上午 9:00 至下午 5:00,太平洋标准时间。

AI Academy 论坛

可用框架和工具

  • 英特尔® Optimization for Theano*
  • 英特尔® Optimization for TensorFlow*
  • 英特尔® Optimization for Caffe*
  • 英特尔® Distribution for Python*(包括 NumPy、SciPy 和 scikit-learn*)
  • Keras 库
  • neon™ 框架
  • MXNet 框架

常见问题解答

综述

复习这些高水平的问题和解答以跨入英特尔 AI DevCloud 和人工智能的门槛。

当我的框架在后台运行时,我如何才能提高深度学习的性能?
在有些情况下,采用默认设置的深度学习代码不能充分利用代码在其上运行的基础计算机的全部计算能力,特别是当代码在英特尔® 至强® 可扩展处理器上运行时。 英特尔开创了优化技术,使 Caffe* 和 TensorFlow* 之类的流行框架达到最适 CPU 性能。 要了解更多信息,请参阅提高流行的深度学习框架在 CPU 上的性能的贴士
谁可请求访问英特尔 AI DevCloud?
开发人员、数据科学家、教授、学生、初创公司等,凡属英特尔® AI Academy 的成员,均有资格请求访问。
我如何可成为英特尔® AI Academy 的成员?
您可通过请求访问而加入英特尔 AI Academy,或者在此处注册而成为成员。
我获得访问权限后会发生什么?
您一旦获得访问权限,就将登录至一个批农场 (batch farm) 的基于 Linux* 的头节点。 在该处,您可存放代码和数据,编译代码,然后将作业提交至一个队列。 排入队列的作业完成之后,结果将出现在您的主 ($HOME) 目录中。
  • 作业在英特尔® 至强® 可扩展处理器上按调度执行。
  • 每个处理器有 24 个双向超线程的内核。
  • 每个处理器可访问 96 GB 的平台上 RAM (DDR4)。
  • 任何处理器一次只能运行一个作业。
  • 您将获得 200 GB 的文件存储配额。
  • 您的主目录对其他用户不可见。

注意:您的访问期一旦过期,您在集群上的主目录将被删除。

我不居住在美国。 我是否仍可访问英特尔 AI DevCloud?
英特尔 AI DevCloud 对英特尔 AI Academy 的所有成员开放,并可从任何国家访问。
使用英特尔 AI DevCloud 需付多少费用?
不需付任何费用。 英特尔 AI DevCloud 对英特尔® AI Academy 成员免费。 加入英特尔 AI Academy 也是免费的。
英特尔 AI DevCloud 上是否安装了 CUDA*?
没有安装。英特尔 AI DevCloud 包括高性能英特尔® 至强® 金牌 6128 处理器,但不包括 CUDA*。
当我尝试运行 pip 安装 <包名称> 时,为何发生权限被拒绝?
要使用默认 Python* 格式安装一个包时,使用以下参数于 pip:

--user 参数

示例:pip install numpy --user

另一个选项是新建一个 Conda* 环境,激活该环境,然后在该环境中执行 pip* 或 Conda 安装。 以默认 Python 格式的同一包的多个版本可能造成问题。 要避免这些问题,为每一个活动创建单独的 Conda 环境。

执行作业

为帮助开发人员在英特尔 AI DevCloud 上执行作业,在 Linux* 的命令行键入以下答复。

如何检查我是位于登录节点还是计算节点?
检查您的终端上的提示符。

如果提示符显示 [uxxxx@c009 ~]$,您位于登录节点。

如果提示符显示类似 [uxxxx@c009-n0xx ~]$,您位于计算节点。
如何检查运行作业的日志?
您可以检查运行作业的日志如下:
  • 要检查输出日志,使用 qpeek:qpeek -o <作业 ID>
  • 要检查错误日志,使用 qpeek -e <作业 ID>
如何检查计算的作业的日志?
检查计算的作业的日志如下:
 
  • 如果使用 qsub 提交作业时提供了名称,日志文件将是 <作业名称>.o<作业 ID><作业名称>.e<作业 ID>
  • 如果没有提供名称,而以 qsub <作业脚本> 提交作业,日志文件将是 <作业脚本>.o<作业 ID><作业脚本>.e<作业 ID>
  • 如果没有提供名称,而以 <命令> | qsub 提交作业,日志文件将是 STDIN.o<作业 ID>STDIN.e<作业 ID>
如何在英特尔 AI DevCloud 上将总挂钟时间 (total wall clock time) 设定为最大值?
在命令行,键入以下之一:
  • echo python <sample.py> -l walltime=24:00:00 | qsub
  • 将挂钟时间添加至批处理脚本中,然后再以 qsub 模式运行:#!/bin/sh#PBS -l walltime=24:00:00 python sample.py
如何查询作业?
在命令行,键入:

qpeek -o <JOBID>

如果此命令不返回任何结果,很可能该作业已完成,qpeek 没有机会查询。

或者,以 "-k oe" 选项运行 qsub:

qsub -k oe my_script

标准输入/输出和错误将被转储至您的主目录。 您可在作业运行之时的任何时间查看。

如何增加挂钟时间?
在命令行,键入以下之一:
  • #PBS -l walltime=<10:30>,mem=320kb
  • echo sleep 1000 | qsub -l walltime=<00:30:00>
如何获得关于作业的完整信息?
在命令行,键入:

qstat -f <JOBID>

如何删除作业?
在命令行,键入:



qdel <JOBID>

如何寻找可供我使用的计算节点的架构和特性?
在登录节点运行以下命令:



pbsnodes

如何登录至一个计算节点?
在命令行,键入:



qsub –I

如何得知节点的详细信息?
在命令行,键入:



pbsnodes -a

为何在运行命令时收到内存错误?
在大多数情况下,内存错误是试图在登录节点上运行计算密集型任务所引起。 在此情况下,使用 qsub –I 登录至计算节点,然后在该处执行命令。
 
我的作业运行超过 24 小时,但英特尔® AI DevCloud 的最大挂钟时间是 24 小时。 在此情况下,如何运行我的作业?
最大挂钟时间设定为 24 小时以确保所有用户公平地利用集群资源。 不过,也提供一些变通办法:
 
  • 以固定间隔保存模型,或者至少在挂钟时间到期之前保存一次模型。 在 24 小时结束时,提交一个新作业,这将载入最后一次保存的模型,然后从该处开始训练。
以固定间隔保存模型的额外好处包括及早取得训练的模型的复本,并可对测试数据评估该模型。 这也有助于了解模型的表现并尽早进行任何更改而不需等待漫长作业完成。
 

登录节点与计算节点之比较

登录节点与计算节点有何差别?
登录节点使用轻量级通用处理器。 计算节点使用能够处理繁重工作负荷的英特尔® 至强® 金牌 6128 处理器。 所有需要大量内存和计算资源的任务都必须在计算节点而不是在登录节点上运行。
登录节点和计算节点在英特尔® AI DevCloud 上如何布局?
下图描述英特尔® AI DevCloud 的总体架构:

英特尔 AI DevCloud 架构图
为何不能在登录节点上运行计算密集型任务?
登录节点是轻量级的,没有能力处理繁重工作负荷。 登录节点主要用于保存数据;因此,对登录节点上的内存和计算二者均施加了限制。 这确保:如果试图在登录节点上运行任何繁重任务,将引发内存错误。
如何检查我是位于登录节点还是计算节点?
如果提示符显示 n0xx,您位于计算节点,如下图所示:

计算节点提示符示例

如果提示符不显示 n0xx,您位于登录节点,如下图所示:

登录节点示例
如何运行计算密集型作业?
可使用以下任何选项在计算节点上运行作业:
 
  • 从登录节点使用 qsub <作业脚本> 提交作业。 该作业在队列中等候,直到调度程序 将其取出, 并且最终在计算节点上运行该作业。
  • 使用 qsub –I 以互动模式运行作业。这会以默认设置创建一个作业,并为您提供来自计算节点的一个终端。 您可在该处直接运行命令。
  • 使用 JupyterHub*。 为此,导航至 Colfax Research。 登录,然后启动服务器。 新建一个 notebook(笔记本),并从该处运行代码。
  • 从 JupyterHub 使用 qsub。 为此,导航至 Colfax Research。 登录,然后启动服务器。 新建一个 notebook(笔记本)。 使用 qsub 命令提交一个作业。 详情可查阅英特尔 AI DevCloud 的主文件夹中的 Welcome.ipynb 文件。
  • 直接从 JupyterHub 终端运行。 为此,导航至 Colfax Research。 登录,然后启动服务器。 启动一个新终端,这是一个计算节点,可在该节点的终端中直接运行计算密集型作业的命令。 (关于启动新终端的更详细信息,请参阅 JupyterHub 终端与 SSH 终端之比较)。
  • 从 JupyterHub 终端使用 qsub。 为此,从 JupyterHub 终端使用“qsub <作业脚本>”提交作业。 这将提交作业,该作业在队列中等候,直到调度程序将其取出并且在计算节点上执行该作业。
用于作业提交的批 qsub 模式和互动 qsub 模式有何差别?
在批 qsub 模式中,从登录节点使用命令“qsub <作业脚本>”创建并提交作业。 <作业脚本> 包含作业命令。

在互动 qsub 模式,使用命令“qsub –I”创建作业。

执行此命令后,您从计算节点获得分配给您的作业的新终端。 然后,可在该终端直接运行作业命令。
如何进入互动 qsub 模式?
在使用 SSH(安全外壳)从 PuTTY*/Linux* 终端访问英特尔 AI DevCloud 时,先进入登录节点。 要以互动 qsub 模式运行作业,键入 qsub –I。这会创建一个新作业,并提供从计算节点分配给此作业的终端。 参见以下图像:

终端屏幕图像样本
何时应使用批 qsub 模式,何时应使用互动 qsub 模式?
当拥有经测试的运行代码,而需要运行该代码并存储结果时,使用批 qsub 模式。

当仍在创建运行代码的进程中并预期会有错误时,使用互动 qsub 模式。

您可同时修复这些错误,如同在本地计算机上那样进行。
如何在批 qsub 模式以及在互动 qsub 模式检查作业状态和日志?
在批 qsub 模式,可以提交作业,进行其他工作,过些时候再回来检查状态更新。 使用 qstat 命令检查作业状态,使用日志文件或 qpeek 命令检查日志。

在互动 qsub 模式,一旦终端过期,在运行作业或命令时写入的日志便被删除。

为 CPU 调整 GPU 特定的配置

是否能在英特尔® AI DevCloud 上用图形处理器 (GPU) 支持运行 TensorFlow*?
英特尔® AI DevCloud 是英特尔® 至强® 可扩展处理器高性能 CPU 的集群。 我们需要确定针对一种 GPU 特定环境编写的代码被转换以便有可能用 CPU 执行。
如何为 CPU 转换 GPU 特定的配置?
可使用两种方法之一来转换:
 
  • 在构建框架时,将配置设置从 GPU 改为 CPU
  • 注释掉或更改专门针对 GPU 编写的代码片段。
如何在深度学习框架中将代码片段从 GPU 改为 CPU?
对 C++:

在文件 detection_loss_layer.cpp(文件夹:src/caffe/layers)中移除以下代码行:

#ifdef CPU_ONLY STUB_GPU(DetectionLossLayer); #endif

对于 PyTorch*:

移除出现 .cuda 的片段以从 GPU 切换至 CPU。

 

例如:

if torch.cuda.available():

import torch.cuda

else:

import torch

要注释掉或更改专门针对 GPU 编写的代码片段,请参阅 GitHub 上用于 Caffe*-Yolo* 的一些示例。
以 CPU 模式构建 Caffe* 时,需要设置哪些配置更改?
  1. 克隆英特尔® Optimization for Caffe*(从 GitHub*)
  2. 进行以下配置更改以在 CPU 上构建 Caffe:
CPU_ONLY: = 1(在 Makefile.configuration 中)

solver_mode: CPU(在 solver.prototxt 中)

英特尔 AI DevCloud 有 CPU 版本的 Faster R-CNN,也随最新版的英特尔 Optimization for Caffe 提供。
如何以 CPU 模式安装 TensorFlow*?
详细信息请参阅 TensorFlow* 安装指南

要安装 TensorFlow*,请参阅英特尔® Optimization for TensorFlow*(仅限 CPU),通过 PIP*、conda* 或从源码。
如何以 CPU 模式安装 PyTorch*?
前往 PyTorch,然后选择匹配您的环境的标准,这包括 CUDA=None,然后运行相应命令。 例如:

1. 在 CPU 上使用 conda 时,使用此命令:

conda install pytorch-cpu torchvision-cpu -c pytorch 2. 在 CPU 上使用 PIP 时,执行以下命令:

pip install http://download.pytorch.org/whl/cpu/torch-0.4.0-cp27-cp27mu-linux_x86_64.whl%20

pip install torchvision

如果以上安装不起作用(因 Python* 2.7 UCS2 已经安装),使用此命令:

pip install http://download.pytorch.org/whl/cpu/torch-0.4.0-cp27-cp27m-linux_x86_64.whl
以 CPU 模式构建 Apache MXNet* 时,如何更改配置?
  1. 为 Apache MXNet* 克隆以下源码:https://github.com/apache/incubator-mxnet.git
  2. make/config.mk 中设置以下字段,以在 CPU 上构建 Apache MXNet:
USE_CUDA = 0

USE_CUDA_PATH = NONE

USE_CUDNN = 0

安装后,需要编辑一些针对 GPU 的代码行。 例如,在文件夹路径 incubator-mxnet/example.speech_recognition 中的语音识别使用案例中:

1) 移除 main.py 中的以下行:

os.environ['MXNET_ENABLE_GPU_P2P'] = "0"

2) 更改 deepspeech.cfg 中的以下行:

context = gpu0,gpu1,gpu2 to context = cpu0,cpu1,cpu2
如何以 CPU 模式安装 Keras?
通过使用 TensorFlow-CPU 或 Theano-CPU 为后端,可以 CPU 模式安装 Keras。

安装 Keras 的命令是:

pip install keras

cd .keras

在文件 keras.json 中指定后端:

{

"image_data_format": "channels_last",

"epsilon": 1e-07,

"floatx": "float32",

"backend": "tensorflow” }

要了解更多信息,请参阅 Keras documentation on backends(在后端的 Keras 文档)

JupyterHub* 终端与 SSH 终端之比较

如何登录至 JupyterHub* 终端?
  1. 前往 Colfax Research
  2. 登录页面输入您的用户 ID 和密码。 您的用户 ID 在英特尔® AI DevCloud 欢迎电子邮件中提供。 密码是唯一用户 ID (UUID),也在欢迎电子邮件中提供。
下图显示登录后出现的主目录内容。

主目录截屏

要打开新终端,在右上角,选择 New(新建),然后选择 Terminal(终端)。 Jupyter Notebook* 终端出现在计算节点上。计算节点上的 Jupyter notebook 终端
如何登录至 SSH 终端?
遵照英特尔 AI DevCloud 欢迎电子邮件链接中的指导执行。

(https://access.colfaxresearch.com/?uuid=xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx)。 如果登录成功,SSH 终端出现,如下图所示:

SSH 终端示例
JupyterHub 终端与 SSH 终端有何区别?
区别在于:

1. 执行时间

JupyterHub* 终端最大会话时间为四小时。 过了该时间,会话终止,不留日志。

SSH 终端为使用 qsub 提交的提供作业六小时的默认挂钟时间。 这些默认设置可更改以提供最多 24 小时的挂钟时间。

2. 作业日志

JupyterHub 终端目前不提供 qpeek 工具,该工具用于取得几乎实时的作业日志。 而且,作业日志可能因会话过期而不能正确写入。

SSH 终端确实提供 qpeek 工具。 使用 qpeek –o <作业 ID>(输出日志)和 qpeek –e <作业 ID>(错误日志),可以检查运行作业的几乎实时的作业日志。

3. 登录的终端

JupyterHub 终端直接登录至计算节点。

SSH 终端直接登录至登录节点。 输入 qsub –I 进入计算节点。
我通过 JupyterHub 终端提交了一个作业。 为什么看不到作业日志?
JupyterHub 会话在四小时结束时过期。 剩余时间显示在会话页面的顶端右侧。 超过四小时的作业在会话时间结束时停止,日志不能正确写入。 对于超过四小时的作业,在 PuTTY 或 Linux SSH 终端,使用 qsub 模式。 在这些场合,我们建议在 PuTTY* 或 Linux* SSH 终端,使用 qsub 模式。