65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Intel® 软件优化 Theano 和 Intel® Python 发行版入门

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2017年5月4日

CPOL

9分钟阅读

viewsIcon

6797

Theano 是 LISA 实验室开发的一个 Python 库,用于定义、优化和评估数学表达式,包括包含多维数组(numpy.ndarray)的表达式。

目录

总结

Theano 是 LISA 实验室开发的一个 Python* 库,用于定义、优化和评估数学表达式,包括包含多维数组(numpy.ndarray)的表达式。Intel® 优化的 Theano 是基于 Theano 0.0.8rc1 的新版本,它针对 Intel® 架构进行了优化,并启用了 Intel® 数学核心库 (Intel® MKL) 2017。最新版本的 Intel MKL 包括针对 Intel® 高级矢量扩展 2 (Intel® AVX2) 和 AVX-512 指令的优化,这些指令在 Intel® Xeon® 处理器和 Intel® Xeon Phi™ 处理器中得到支持。

Theano 可以在多种平台上与多种开发工具和库组合进行安装和使用。本教程提供了一种方法,介绍了在基于 CentOS* 和 Ubuntu* 的系统上使用 Intel® 编译器和 Intel MKL 2017 构建和安装 Intel 优化 Theano 的步骤。我们还将通过运行 MNIST*、DBN-Kyoto*、LSTM* 和 ImageNet* 等行业标准基准测试来验证安装。

先决条件

Intel® 编译器和 Intel® 数学核心库 2017

本教程假设 Intel 编译器(C/C++ 和 Fortran)已安装并验证。如果没有,可以作为 Intel® Parallel Studio XE 的一部分下载和安装,或者独立安装。

在使用 Intel® Python 发行版* 时,安装 Intel MKL 2017 是可选的。对于其他 Python 发行版,Intel MKL 2017 可以作为 Intel Parallel Studio XE 2017 的一部分下载,或者使用社区许可证免费下载和安装。要下载它,请先在此处 注册 免费社区许可证,然后按照安装说明进行操作。

Python* 工具

在本教程中,将使用 Intel® Python 发行版*,因为它提供了对在 Intel 架构上实现更高性能的工具和技术的即时访问。这将允许使用 Intel 优化的预编译工具,如 NumPy* 和 SciPy*,而无需担心构建和安装它们。

Intel Distribution for Python 可作为 Intel Parallel Studio XE 的一部分提供,也可以在此处 免费独立下载

以下是安装 Intel Distribution for Python 的说明。本文假设 Python 安装已在本地用户帐户中完成。

Python 2.7
tar -xvzf l_python27_p_2017.0.028.tgz
cd l_python27_p_2017.0.028
./install.sh

Python 3.5
tar -xvzf l_python35_p_2017.0.028.tgz
cd l_python35_p_2017.0.028
./install.sh

使用 anaconda,通过以下步骤创建一个独立的用户环境。在此,还将安装所需的 NumPy、SciPy 和 Cython 包。

Python 2.7
conda create -n pcs_theano_2 -c intel python=2 numpy scipy cython
source activate pcs_theano_2

Python 3.5
conda create -n pcs_theano_2 -c intel python=3 numpy scipy cython
source activate pcs_theano_2

或者,也可以按照 附录 A 中的说明从源代码构建和安装 NumPy 和 SciPy。还展示了安装其他 Python 开发工具的步骤,以防使用非 Intel 发行版的 Python。

构建和安装 Intel® Theano* 软件优化

可以从以下 git 存储库检出并安装针对 Intel 架构优化的 Theano 分支。

git clone https://github.com/intel/theano.git theano
cd theano
python setup.py build
python setup.py install
theano-cache clear

下面提供了一个 Theano 配置文件示例供参考。要使用 Intel 编译器并指定要与 Theano 一起使用的编译器标志,请在用户的家目录中创建此文件的副本。

vi ~/.theanorc

[cuda]
root = /usr/local/cuda

[global]
device = cpu
floatX = float32
cxx = icpc
mode = FAST_RUN
openmp = True
openmp_elemwise_minsize = 10
[gcc]
cxxflags = -qopenmp -march=native -O3 -vec-report3 -fno-alias -opt-prefetch=2 -fp-trap=none
[blas]
ldflags = -lmkl_rt

验证 Theano 和 NumPy 安装

导入 Theano 和 NumPy 库后,验证它们引用的版本非常重要。本文中引用的 NumPy 和 Theano 版本通过以下方式进行验证:

python -c "import numpy; print (numpy.__version__)"
->1.11.1
python -c "import theano; print (theano.__version__)"
-> 0.9.0dev1.dev-*

同时,验证安装的 NumPy 和 Theano 版本是否使用 Intel MKL 也非常重要。

python -c "import theano; print (theano.numpy.show_config())"

NumPy_Config

图 1. theano.numpy.show_config() 的预期输出

基准测试

DBN-Kyoto 和 ImageNet 基准测试可在 theano/democase 目录中找到。

DBN-Kyoto

获取用于运行 DBN-Kyoto 的数据集

DBN-Kyoto 的示例数据集可以通过以下链接从 Dropbox 下载:https://www.dropbox.com/s/ocjgzonmxpmerry/dataset1.pkl.7z?dl=0。解压文件并将其保存在 theano/democase/DBN-Kyoto 目录中。

必备组件

DBN-Kyoto 训练的依赖项可以使用 Anaconda 安装,或者使用 tools 目录中提供的源代码构建。由于 pandas 库和 Python 3 之间存在一些冲突,此基准测试仅针对 Python 2.7 进行了验证。

Python 2.7
conda install -c intel --override-channels pandas
conda install imaging

或者,也可以按照 附录 B 中的说明从源代码安装依赖项。

在 CPU 上运行 DBN-Kyoto

提供的 run.sh 脚本可用于下载数据集(如果尚未存在)并开始训练。

cd theano/democase/DBN-Kyoto/
./run.sh

MNIST

在本文中,我们将演示如何使用 Lasagne 在 MNIST 上训练神经网络,Lasagne 是一个用于在 Theano 中构建和训练神经网络的轻量级库。将使用 Intel 编译器构建和安装 Lasagne 库。

下载 MNIST 数据库

MNIST 数据库可从 http://yann.lecun.com/exdb/mnist/ 下载。我们下载了训练和验证数据的图像和标签。

安装 Lasagne 库

最新版本的 Lasagne 库可以从下面的 Lasagne git 存储库构建和安装:

Python 2.7 and Python 3.5
git clone https://github.com/Lasagne/Lasagne.git
cd Lasagne
python setup.py build
python setup.py install

培训

cd Lasagne/examples
python mnist.py [model [epochs]]
                    --  where model can be mlp - simple multi layer perceptron (default) or 
                         cnn - simple convolution neural network.
                         and epochs = 500 (default)

AlexNet

获取用于 AlexNet 训练的 ImageNet 数据集

ImageNet 数据集可从 image-net 网站 获取。

必备组件

AlexNet 训练的依赖项可以使用 Anaconda 安装,或从 fedora epel 源存储库安装。目前,Hickle(用于预处理数据的必需依赖项)仅在 Python 2 中可用,在 Python 3 中不支持。

  • 使用 Anaconda 安装 h5py、pyyaml、pyzmq
conda install h5py
conda install -c intel --override-channels pyyaml pyzmq
  • 安装 Hickle(基于 HDF5 的 Pickle 克隆)
git clone https://github.com/telegraphic/hickle.git
cd hickle
python setup.py build
python setup.py install

或者,也可以按照 附录 B 中的说明使用源代码安装依赖项。

预处理 ImageNet 数据集

需要进行预处理才能转储 Hickle 文件并创建训练和验证数据的标签。

  • 下面提供了一个 paths.yaml 文件示例供参考。修改预处理目录中的 *paths.yaml* 文件以更新数据集路径。
cat theano/democase/alexnet_grp1/preprocessing/paths.yaml

train_img_dir: '/mnt/DATA2/TEST/ILSVRC2012_img_train/'
# the dir that contains folders like n01440764, n01443537, ...

val_img_dir: '/mnt/DATA2/TEST/ILSVRC2012_img_val/'
# the dir that contains ILSVRC2012_val_00000001~50000.JPEG

tar_root_dir: '/mnt/DATA2/TEST/parsed_data_toy'  # dir to store all the preprocessed files
tar_train_dir: '/mnt/DATA2/TEST/parsed_data_toy/train_hkl'  # dir to store training batches
tar_val_dir: '/mnt/DATA2/TEST/parsed_data_toy/val_hkl'  # dir to store validation batches
misc_dir: '/mnt/DATA2/TEST/parsed_data_toy/misc'
# dir to store img_mean.npy, shuffled_train_filenames.npy, train.txt, val.txt

meta_clsloc_mat: '/mnt/DATA2/imageNet-2012-images/ILSVRC2014_devkit/data/meta_clsloc.mat'
val_label_file: '/mnt/DATA2/imageNet-2012-images/ILSVRC2014_devkit/data/ILSVRC2014_clsloc_validation_ground_truth.txt'
# although from ILSVRC2014, these 2 files still work for ILSVRC2012

# caffe style train and validation labels
valtxt_filename: '/mnt/DATA2/TEST/parsed_data_toy/misc/val.txt'
traintxt_filename: '/mnt/DATA2/TEST/parsed_data_toy/misc/train.txt'

可以使用提供的脚本 - generate_toy_data.sh1 - 创建玩具数据集。

cd theano/democase/alexnet_grp1/preprocessing
chmod u+x make_hkl.py make_labels.py make_train_val_txt.py
./generate_toy_data.sh

在 CPU 上进行 AlexNet 训练

  • 修改 config.yaml 文件以更新预处理数据集的路径。
cd theano/democase/alexnet_grp1/

# Sample changes to the path for input(label_folder, mean_file) and output(weights_dir)
label_folder: /mnt/DATA2/TEST/parsed_data_toy/labels/
mean_file: /mnt/DATA2/TEST/parsed_data_toy/misc/img_mean.npy
weights_dir: ./weight/  # directory for saving weights and results
  • 同样,修改 *spec.yaml* 文件以更新解析后的玩具数据集的路径。
# Directories
train_folder: /mnt/DATA2/TEST/parsed_data_toy/train_hkl_b256_b256_bchw/
val_folder: /mnt/DATA2/TEST/parsed_data_toy/val_hkl_b256_b256_bchw/
  • 开始训练
./run.sh

大型电影评论数据集(IMDB)

大型电影评论数据集是使用长短期记忆(LSTM)模型的递归神经网络的一个例子。IMDB 数据集用于使用 LSTM 模型对电影评论进行情感分析。

获取数据集

http://www-labs.iro.umontreal.ca/~lisa/deep/data/ 获取 *imdb.pkl* 文件,并将其解压到本地文件夹。

预处理

页面 http://deeplearning.net/tutorial/lstm.html 提供了两个脚本:

Imdb.py – 处理 IMDB 数据集的加载和预处理。

Lstm.py – 定义和训练模型的主要脚本。

将以上两个文件复制到与 imdb.pkl 文件相同的文件夹中。

培训

可以使用以下命令开始训练:

THEANO_FLAGS="floatX=float32" python lstm.py

故障排除

错误 1:在某些情况下,您可能会遇到无法打开 libmkl_rt.so 或 libimf.so 等错误。在这种情况下,请尝试以下操作:

find /opt/intel -name library_name.so

将路径添加到 /etc/ ld.so.conf 文件,然后运行 ldconfig 命令链接库。同时,请确保 MKL 安装路径在 LD_LIBRARY_PATH 环境变量中设置正确。

错误 2:AlexNet 玩具数据预处理错误

python make_hkl.py toy
generating toy dataset ...
Traceback (most recent call last):
  File "make_hkl.py", line 293, in <module>
    train_batchs_per_core)
ValueError: xrange() arg 3 must not be zero

目前,预处理 ImageNet 的默认进程数设置为 16。对于玩具数据集,这将创建比必需更多的进程,导致应用程序崩溃。要解决此问题,请在文件 *Alexnet_CPU/preprocessing/make_hkl.py:258* 中将进程数从 16 更改为 2。但是,在预处理完整数据集时,建议使用较高的 num_process 值以加快预处理速度。

num_process = 2

错误 3:通过 Conda 安装 Intel(R) Python 发行版* 时引用当前版本的 Numpy

如果从 Conda 中安装 Intel(R) Python 发行版*,而不是通过 Intel(R) Python 发行版* 安装程序,请确保将 PYTHONNOUSERSITE 环境变量设置为 True。这将使 Conda 环境能够引用正确版本的 Numpy。这是 Conda 中的一个已知错误。更多信息可以在此处 找到

export PYTHONNOUSERSITE=True

资源

附录 A

为其他 Python 发行版安装 Python* 工具

CentOS:
Python 2.7 - sudo yum install python-devel python-setuptools
Python 3.5 - sudo yum install python35-libs python35-devel python35-setuptools
//Note - Python 3.5 packages can be obtained from Fedora EPEL source repository
Ubuntu:
Python 2.7 - sudo apt-get install python-dev python-setuptools
Python 3.5 - sudo apt-get install libpython3-dev python3-dev python3-setuptools
  • 如果系统中没有安装 pip 和 cython,可以使用以下命令进行安装:
sudo -E easy_install pip
sudo -E pip install cython

安装 NumPy

NumPy 是使用 Python 进行科学计算所需的基础包。此包包含:

  1. 一个强大的 N 维数组对象
  2. 复杂的(广播)函数
  3. 集成 C/C++ 和 Fortran 代码的工具
  4. 有用的线性代数、傅里叶变换和随机数功能。

注意:可以通过验证旧版本 NumPy 库的存在并删除相关文件来移除它。但是,在本教程中,所有剩余的库都将安装在用户的本地目录中,因此此步骤是可选的。如果需要,可以按以下方式清理旧版本:

  • 验证旧版本是否存在
python -c "import numpy; print numpy.version"
<module 'numpy.version' from '/home/plse/.local/lib/python2.7/site-packages/numpy-1.11.0rc1-py2.7-linux-x86_64.egg/numpy/version.pyc'>
  • 删除任何先前安装的 NumPy 包
rm -r /home/plse/.local/lib/python2.7/site-packages/numpy-1.11.0rc1-py2.7-linux-x86_64.egg
  • 构建和安装针对 Intel 架构优化的 NumPy
git clone https://github.com/pcs-theano/numpy.git
//update site.cfg file to point to required MKL directory. This step is optional if parallel studio or MKL were installed in default /opt/intel directory.
python setup.py config --compiler=intelem build_clib --compiler=intelem build_ext --compiler=intelem install --user

安装 SciPy

SciPy 是一个用于科学计算和技术计算的开源 Python 库。SciPy 包含用于优化、线性代数、积分、插值、特殊函数、FFT、信号和图像处理、ODE 求解器以及科学工程中常见的其他任务的模块。

  • 构建和安装 SciPy
tar -xvzf scipy-0.16.1.tar.gz    (can be downloaded from: https://sourceforge.net/projects/scipy/files/scipy/0.16.1/  or 
     obtain the latest sources from https://github.com/scipy/scipy/releases) 
cd scipy-0.16.1/
python setup.py config --compiler=intelem --fcompiler=intelem build_clib --compiler=intelem --fcompiler=intelem build_ext --compiler=intelem --fcompiler=intelem install --user

附录 B

从源代码构建和安装基准测试依赖项

DBN-Kyoto

//Untar and install all the provided tools:

cd theano/democase/DBN-Kyoto/tools
tar -xvzf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
python setup.py build
python setup.py install --user

cd theano/democase/DBN-Kyoto/tools
tar -xvzf python-dateutil-2.4.1.tar.gz
cd python-dateutil-2.4.1
python setup.py build
python setup.py install --user

cd theano/democase/DBN-Kyoto/tools
tar -xvzf pytz-2014.10.tar.gz
cd pytz-2014.10
python setup.py build
python setup.py install --user

cd theano/democase/DBN-Kyoto/tools
tar -xvzf pandas-0.15.2.tar.gz
cd pandas-0.15.2
python setup.py build
python setup.py install --user

AlexNet

  • 从源代码安装 AlexNet 的依赖项

运行 AlexNet(CPU 版本)可能需要访问 fedora epel 源存储库中的某些附加包。

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
sudo rpm -ihv epel-release-7-8.noarch.rpm
sudo yum install hdf5-devel
sudo yum install zmq-devel
sudo yum install zeromq-devel
sudo yum install python-zmq
  • 安装 Hickle(基于 HDF5 的 Pickle 克隆)
git clone https://github.com/telegraphic/hickle.git
python setup.py build install --user
  • 安装 h5py(HDF5 二进制数据格式的 Python 接口)
git clone https://github.com/h5py/h5py.git
python setup.py build install --user

参考文献

关于作者

Sunny Gogar
Sunny Gogar
软件工程师

Sunny Gogar 在佛罗里达大学盖恩斯维尔分校获得了电气与计算机工程硕士学位,并在印度孟买大学获得了电子与通信学士学位。他目前是 Intel 公司软件与服务事业部的一名软件工程师。他的兴趣包括并行编程以及针对多核和众核处理器架构的优化。

Meghana Rao 在波特兰州立大学获得了工程与技术管理硕士学位,在印度班加罗尔大学获得了计算机科学与工程学士学位。她是 Intel 软件与服务事业部的开发者布道师,专注于机器学习和深度学习。

© . All rights reserved.