今天,随着Graphcore加入Docker的发布者验证计划(Verified Publisher Program),开发人员可以通过Docker Hub访问Graphcore的Poplar® SDK。我们与Docker一起将我们的软件栈作为容器映像发布,使开发人员能够在Graphcore IPU系统上轻松构建、管理和部署机器学习应用程序。
我们将继续提升开发人员体验,让我们的硬件和软件更易于使用。就在一年前,我们为用户推出了一系列预构建的Docker容器。现在我们向Docker Hub社区的所有人完全开放Poplar SDK、用于IPU的PyTorch、用于TensorFlow的IPU和工具的访问权限,作为我们推动创新这一使命的一部分。
下面让我们来进一步了解它对于开发人员的价值以及如何开始使用它。
为什么Docker对我们的社区如此重要
Docker已经成为拉取容器映像的主要来源。根据最新的索引报告,Docker Hub上的拉取次数达到了3960亿次。此外,根据有80,000名开发人员参与回答的2021年Stack Overflow问卷调查,Docker Hub仍然是“最想拥有、最受欢迎和最多使用”的开发人员工具之一。

未使用该语言或技术进行开发但表示有兴趣使用的开发人员的比例
对于IPU开发人员,我们的Docker容器映像通过为使用PyTorch、TensorFlow或直接使用Graphcore Poplar SDK构建的应用程序提供预打包的运行时环境,简化并加速了在IPU系统上部署在生产环境中的应用程序开发工作流。容器化应用程序通过一致、可重复的执行提高了应用程序的可移植性,并且是许多MLOps框架的重要促成因素。
开发人员可以使用什么?
截至目前,开发人员可以自由安装与IPU(智能处理器)共同设计的、专门用于机器智能应用程序的Poplar软件栈。Poplar是Graphcore的计算图工具链,是我们易于使用且灵活的软件开发环境的核心,与标准机器学习框架完全集成,因此开发人员可以轻松移植现有模型。对于希望完全控制以最大化利用IPU性能的开发人员,Poplar支持通过PopART™(Poplar高级运行时)使用Python和C++直接进行IPU编程。

可以通过以下存储库提取Poplar SDK映像:
- Poplar SDK——包含Poplar、PopART和与IPU设备交互的工具
- PyTorch for IPU——包含Poplar SDK存储库中的所有内容,并预装了PyTorch
- 用于IPU的TensorFlow——包含Poplar SDK存储库中的所有内容,并预装了TensorFlow 1或2
- 工具——包含用于IPU设备的管理和诊断工具
作为Docker发布者验证计划的一部分,Graphcore容器映像不受速率限制,这意味着开发人员对Poplar的容器映像请求不受限制,与他们的Docker Hub订阅情况无关。
在Docker启用Poplar
Poplar Docker容器在一个完整的文件系统中封装了在IPU中运行模型所需的一切(即Graphcore的Poplar® SDK、运行时环境、系统工具、配置和库)。为了使用这些映像并运行IPU代码,您需要完成以下步骤:
- 在主机上安装Docker
- 从Docker Hub中拉取Graphcore的Poplar SDK容器映像
- 准备对IPU的访问
- 用Docker容器验证IPU的可访问性
- IPU中的应用程序代码样本
在主机上安装Docker
Docker的安装方式会根据操作系统、版本和处理器而有所不同。
您可以按照Docker入门指南进行安装。
从Docker Hub拉取Graphcore的Poplar SDK容器映像
在Docker安装完毕后,您就可以运行命令以从Docker Hub下载我们托管的映像并在主机上运行它们。可从Docker Hub上的Graphcore Poplar存储库中提取Poplar SDK容器映像。
共有四个存储库,这些存储库可能包含基于SDK版本、操作系统和架构的多个映像。
- graphcore/pytorch
- graphcore/tensorflow
- graphcore/poplar
- graphcore/tools
从框架存储库中拉取,该操作将默认下载为AMD主机处理器编译的最新版本SDK。
如要拉取最新TensorFlow映像,请使用:
$ docker pull graphcore/tensorflow
如果您想为特定SDK版本和处理器选择一个特定的构造,可基于Docker映像标签来配置标签。
准备对IPU的访问
为了与POD中的IPU对话,我们必须配置主机和IPU之间的连接,即IPU over Fabric(IPUoF)。Poplar访问设备所需的信息可以通过IPUoF配置文件传递。在默认状态下,该文件被写入主目录下的一个目录(~/.ipuof.conf.d)。当Poplar主机不能直接网络访问V-IPU控制器时(例如出于安全原因),该配置文件就非常有用。
如果使用Graphcloud,每次创建新用户并将其添加到POD时都会生成IPUoF默认配置文件。检查该文件夹内是否有.conf文件(例如,~/.ipuof.conf.d/lr21-3-16ipu.conf)。如果有这样的设置,可以进行下一步。
如果没有,则需要按照V-IPU指南:入门配置Poplar以连接到V-IPU服务器。注意,要把IPUoF配置文件保存在~/.ipuof.conf.d文件夹中,以便运行下一节的脚本。
使用Docker容器验证IPU的可访问性
现在您已经准备好容器,您可以检查是否能从容器内部访问IPU。
通过运行以下程序,在容器上下文环境中列出IPU设备:
$ docker run –rm –ulimit memlock=-1:-1 –net=host –cap-add=IPC_LOCK –device=/dev/infiniband –ipc=host -v ~/.ipuof.conf.d/:/etc/ipuof.conf.d -it graphcore/tools gc-info -l
运行TensorFlow示例应用程序
首先,从GitHub中的Graphcore教程存储库中获取代码。
$ git clone https://github.com/graphcore/tutorials.git
$ cd tutorials
Docker容器是一个隔离环境。该容器将变空并且不能访问主机的文件系统。为了使用主机中的数据,数据需要在Docker容器中被访问。
可以通过挂载目录作为卷的方式,使数据具有可访问性,以便在主机和Docker容器环境之间共享数据。
在使用基于Docker的开发环境时,一个常见的模式是将当前目录挂载到容器中(如第2.2部分所述,从主机挂载目录),然后使用-w <dir name>设置容器内的工作目录。例如: -v “$(pwd):/app” -w /app。
如要在TensorFlow中运行mnist示例,您可以通过运行以下命令将教程存储库挂载到Docker容器中并运行该存储库。
$ docker run –rm –ulimit memlock=-1:-1 –net=host –cap-add=IPC_LOCK –device=/dev/infiniband –ipc=host -v ~/.ipuof.conf.d/:/etc/ipuof.conf.d -it -v “$(pwd):/app” -w /app graphcore/tensorflow:2 python3 simple_applications/tensorflow2/mnist/mnist.py
开发人员资源和链接