人工智能平台之软件环境自由定制
人工智能计算及数据应用服务平台(https://ai.sccas.cn)是为用户打造的开箱即用的人工智能、机器学习计算平台。该AI平台在硬件提供了总共384块 NVIDIA Tesla P100 GPU卡。用户在使用时可以根据自己的需要,自由选择使用单块至多块GPU卡。AI平台在软件方面几乎囊括了目前流行的所有人工智能、机器学习的框架
(Tensorflow/Caffe/Keras/MXNET/PyTorch/Theano 等等)。用户将自己的代码上传至AI平台上,进行简单的作业资源设定,便可以使用平台上的GPU进行对自己的模型进行训练了。对于用户来说,AI平台提供了一整套完整的人工智能、机器学习的计算环境,用户可以将注意力完全放在自己的模型算法的实现和优化上。

AI平台虽然已经提供了全套人工智能、机器学习的框架, 但人工智能、机器学习具有非常强的学科广泛性,专业学科所需要的工具库不可能全部都集成在AI平台中。另一方面,人工智能、机器学习的框架更新速度非常快,不同的用户会基于不同的版本来进行开发,在进行模型训练时同样在对应版本的环境下运行。因此,用户需要根据自己的实际需要对AI平台上的软件环境进行定制。AI平台出于安全方面的考虑,禁止访问互联网,那么用户如何来实现软件环境的定制呢?这个就是我们要讨论的重点。

由于AI平台上无法直接访问互联网,用户直接在物理环境下定制软件环境会受到较大限制。为实现软件环境的用户自定制,AI平台提供了容器化的解决方案。利用容器对环境高度重现性和可移动性。用户可以在本地使用容器对所需的软件环境进行定制安装,完成后打包成单个镜像文件,再将镜像文件从本地上传至AI平台上,然后就可以在AI平台上使用自己定制的软件环境了。
提到容器,大家可能想到的是docker, 但是docker由于安全性、用户权限、对GPU/IB等硬件的支持,以及与作业调度器的集成等方面尚不完善,难以在高性能计算的场景下应用。AI平台上使用了专门针对高性能计算场景开发的容器Singularity。Singularity能够完全兼容docker的镜像, 通过一个命令就可以直接将docker镜像转换成Singularity镜像。访问https://www.sylabs.io 可以获得Singularity更多详细介绍和使用手册。

使用Singularity容器进行定制软件环境的步骤如下:
1. 用户本地安装Singularity
2. 从AI平台上下载基础镜像至本地
3. 基于基础镜像生成自定义镜像
4. 在用户自定义镜像中安装所需的软件环境
5. 将自定义镜像打包成单一镜像文件
6. 将镜像文件上传至AI平台使用

容器定制软件环境是在用户本地完成的,因此需要在用户本地安装Singularity的容器环境。Singularity的容器环境不支持windows操作系统,若使用Windows操作系统,可以使用虚拟机安装Linux操作系统,然后在Linux操作系统中完成Singularity容器环境的安装。
Singulairty版本更新比较快,当前发布最新的版本是3.1.0。在AI平台上所使用的Singularity的版本为:‘2.4.2-dist’,可以通过如下命令查看版本信息:

为确保容器镜像具有较好的兼容性,建议用户在本地安装的Singularity的版本与AI平台上的Singularity版本保持一致。以下是在Ubuntu上安装Singularity的操作步骤。其他操作系统上的安装,请参考官方安装手册。

· 从AI平台上下载基础镜像至本地
容器镜像可以在用户本地从零基础开始创建,但是镜像内的有些硬件驱动(例如:GPU驱动)依赖于实际的物理环境,不太适合用户自己操作。因此AI平台将一些不适合用户操作安装(硬件驱动等)都预先封装到一个基础镜像中,用户拿到基础镜像后,只需要以基础镜像为蓝本,安装定制自己需要的软件环境就能快速的创建出一个新的容器镜像。AI平台上的基础镜像位于:

用户可以通过AI平台上的”文件快传“ 将该基础镜像下载到本地。
当前”文件快传“工具 仅允许对用户home下的文件进行传输,我们可以在home目录下为基础镜像创建一个软连接。然后再开始下载。

· 生成用户自定义镜像
基础镜像下载至本地后,用户便可基于基础镜像生成自定义镜像,后续用户自定义软件环境的安装均在该自定义镜像中完成。假设基础镜像在本地的路径为:

在本地生成用户自定义镜像的路径为:

可以使用如下命令生成本地自定义镜像 (注意: 在本地操作镜像时,需要使用root用户来进行操作)

· 在容器内安装自定义的软件环境
自定义的容器现在已经就绪,下面我们就可以进入容器,按照自己的需要对容器内的软件环境进行安装和定制。
基础镜像中已经包含了GPU的驱动和CUDA, 下面就以安装tensorflow-gpu为例来演示如何在容器中定制软件环境。
1. 进入容器内部 (注:必须以root身份操作)

2. 查看容器内默认Python版本

3. 查看容器内已经安装的Python modules

4. 查看容器内已经安装的CUDA版本,因为tensorflow-gpu 支持CUDA 9 的最高版本是1.12.0, 后续的版本依赖于CUDA 10

5. 在容器内安装tensorflow-gpu 1.12.0

6. 简单测试安装是否成功

· 在本地将自定义镜像打包成单文件格式
完成了各种软件环境的安装配置后,就可以将自定义镜像进行打包,打包成单文件的格式,方便传输到AI平台上进行使用。

命令执行后,会生成单个文件~/production_container.simg. 这个就是打包后的镜像文件了。
· 将镜像文件上传至AI平台
再次使用AI平台上的文件快传工具,将打包后的镜像文件上传到AI平台上。

· 使用自定义镜像运行作业
下面就使用自定义的镜像运行一个非常简单的测试作业。
在用户home目录下,增加一个test_gpu.py的文件,文件内容如下:

打开AI平台上的"Tensorflow"作业提交界面,设置作业运行相关的参数如下:

作业运行完成后,会从日志中看到类似如下信息:

总结
人工智能计算及数据应用服务平台既为入门者提供了开箱即用的人工智能、机器学习框架的合集,同时利用容器技术也为资深用户提供了灵活的软件环境定制化功能。不管你是已经上车人工智能,还是将要上车人工智能,人工智能计算及数据应用服务平台都会是你上车神器。还等什么呢? 赶紧上车… …

人工智能计算及数据应用服务平台试用,请扫码申请

