3. 环境准备
本章将介绍IPU所需的主机硬件和操作系统,以及如何通过Docker容器启动IPU运行环境并验证IPU工作正常。
3.1. 主机CPU架构
主机用于运行Poplar graph engine并与IPU通信,需要采用以下的CPU架构:
Intel
AMD
3.2. 主机操作系统
支持如下的操作系统:
CentOS 7.6
Debian 10
Ubuntu 20.04
3.3. Docker
建议版本: 20.10.11, build dea9396
3.4. Poplar SDK
Poplar SDK version 3.1 及以上版本。
3.4.1. 安装Poplar SDK
通过 Graphcore Downloads portal 下载Poplar SDK。在 Poplar 标签页找到 Poplar SDK,点击 Load More Packages 找到与操作系统对应的tarball进行下载。
通过以下命令来检查操作系统的版本信息:
$ lsb_release -a
Poplar SDK tarball的命名规则如下:
poplar_sdk-[os]-[poplar_ver].tar.gz
[os]
是主机操作系统, [poplar_ver]
是SDK的版本号。
例如,Ubuntu 18.04,SDK版本为2.6.0的Poplar SDK tarball名称如下:
poplar_sdk-ubuntu_18_04-2.6.0-33d3efd05d.tar.gz
通过以下的命令解压和安装SDK:
$ tar -xvzf poplar_sdk-[os]-[ver].tar.gz
关于Poplar SDK的更多信息,请参考 Poplar SDK Overview 中的 Contents of the SDK 。
3.5. 检查IPU硬件
通过以下命令列出C600设备:
$ ls -alt /dev/ipu*
每个C600设备对应三个文件:
/dev/ipu{id}
/dev/ipu{id}_ex
/dev/ipu{id}_mem
例如,设备ID为0的信息如下:
$ ls -alt /dev/ipu*
crw-rw-rw- 1 root root 486, 0 Sep 26 03:48 /dev/ipu0
crw-rw-rw- 1 root root 486, 1 Sep 26 03:48 /dev/ipu0_ex
crw-rw-rw- 1 root root 486, 2 Sep 26 03:48 /dev/ipu0_mem
备注
如果在M2000或Bow-2000环境中测试, ls -alt /dev/ipu*
将返回空。
备注
如果 ls -alt /dev/ipu*
未列出任何设备文件,请联系系统管理员确认IPU硬件设备和驱动是否安装正常。
3.6. 安装PopRT
在 Section 2.3.1, 模型编译 中提到,需要通过PopRT将模型编译成PopEF文件。可以通过以下方式安装PopRT:
3.6.1. 通过容器安装
PopRT提供了容器镜像来快速启动,在 Section 3.7, 通过容器启动IPU运行环境 中提到,在主机安装了Poplar SDK的情况下推荐使用 gc-docker 启动容器,可以更方便的将IPU设备映射到启动的容器中。
使用 gc-docker
启动容器的命令如下,如果主机上没有安装Poplar SDK,请参考 Section 3.7.2, 使用docker run启动容器 。
$ gc-docker -- --rm \
graphcorecn/poprt-staging:latest \
--help
命令执行成功,得到如下的输出。
usage: python -m poprt.cli [-h]
[--available_memory_proportion AVAILABLE_MEMORY_PROPORTION]
...
[--skip_passes SKIP_PASSES] [-v]
poprt is a tool for quickly deploying ONNX models on IPUs.
optional arguments:
-h, --help show this help message and exit
...
-v, --version print version
3.6.2. 通过pip安装
当需要将PopRT与其他工具集成时可以使用 pip
的方式安装,需要保证其运行在对应的Poplar SDK版本的环境中。
$ pip3 install <PopRT_wheel>
更多关于PopRT安装的信息,请参考 PopRT 文档。
3.7. 通过容器启动IPU运行环境
用户可以从 Docker Hub 上拉取Poplar的容器镜像。Graphcore为Poplar SDK、机器学习框架,如TensorFlow、PyTorch,和工具提供了容器镜像, 用户可以根据自己的需求拉取不同的镜像使用,或者以其为基础构建新的镜像。更多容器镜像相关的内容请参考 Using IPUs from Docker 。
3.7.1. gc-docker
gc-docker 是Poplar SDK中提供的命令行工具,可以为Docker提供IPU设备信息。更多关于 gc-docker
的内容请参考 Graphcore Command Line Tools 。 此命令行工具需要在主机上安装Poplar SDK,并在Bash或Z Shell下通过以下命令启动。
$ source [poplar-installation-path]/enable.sh
如果主机上没有安装Poplar SDK,请参考 Section 3.7.2, 使用docker run启动容器.
可以通过 gc-docker -e
的方式查看产生的IPU设备信息。如下图所示,通过 -d 0
将ipu0设备映射到容器。
$ gc-docker -e -d 0
/usr/bin/docker run --device=/dev/ipu0:/dev/ipu0 --device=/dev/ipu0_ex:/dev/ipu0_ex --device=/dev/ipu0_mem:/dev/ipu0_mem --ipc=host
通过以下命令将启动一个容器,并将ipu0设备映射到容器中。如果要映射其他设备,请修改 -d 0
参数为系统管理员分配的硬件ID。
$ gc-docker -d 0 -- --rm -it \
graphcorecn/poplar-staging:latest
3.7.2. 使用docker run启动容器
推荐使用 gc-docker
的方式启动容器,如果在host机器上没有Poplar SDK的情况下,也可以通过 docker run
来启动容器,这时需要通过 --device
来映射硬件资源到容器。
$ docker run --rm -it \
--network=host \
--device=/dev/ipu0:/dev/ipu0 \
--device=/dev/ipu0_ex:/dev/ipu0_ex \
--device=/dev/ipu0_mem:/dev/ipu0_mem \
graphcorecn/poplar-staging:latest
备注
如果在IPU-M2000或Bow-2000环境中测试,请使用 --device=/dev/infiniband/
,或咨询设备管理员
备注
请咨询系统管理员来获取可用设备,并通过
gc-docker
或docker run
命令中的-d
或--device
参数映射设备到容器中。K8s集群中的IPU资源管理,请参考 Kubernetes IPU Device Plugin User Guide
3.7.3. 容器内查询IPU的状态
在容器中通过以下命令可以查询IPU的状态:
$ gc-monitor
期望得到如 Listing 3.1 的输出,如果返回错误信息,请联系系统管理员确认IPU的驱动安装正常。
+---------------+---------------------------------------------------------------------------------------------+
| gc-monitor | Installed driver: 1.1.6 |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| Slot | Serial | ICU FW | Type | Speed | Ln | ID | PCIe ID | IPU# |LnErrS|HostLnErrS|
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 102 | 0063.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 0 | 0000:35:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 100 | 0079.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 1 | 0000:37:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 0 | 0269.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 2 | 0000:39:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 0 | 0189.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 3 | 0000:3b:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 106 | 0280.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 4 | 0000:9c:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 104 | 0019.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 5 | 0000:9e:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 0 | 0224.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 6 | 0000:a0:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
| 0 | 0050.0063.822391 | 2.6.4 | C600 |16.0 GT/s | 8 | 7 | 0000:a2:00.0 | 0 | 0 | - |
+------+--------------------+----------+-------+----------+----+----+----------------+------+------+----------+
+--------------------------------------------------------------------------------------------------+
| No attached processes |
+--------------------------------------------------------------------------------------------------+
备注
在运行示例前可以使用 gc-monitor
查看是否有空闲设备,后续示例中省略了此步骤