6. System platform software configuration

The Bow Pod DA system implements a close-to-zero configuration experience when it comes to server setup and Bow-2000 software configuration and installation. Network setup between servers and Bow-2000s is also automated, both for the management network and the data-plane RoCE network (server RNIC to Bow-2000 directly cabled network). No other changes are required to any existing server networking.

The system platform includes both the server and the Bow-2000s and their software and networking configuration.

Three software installation and configuration steps are required for bringing the system up to be a fully functional machine learning system.

  • Steps 1+2: Bow Pod DA system platform software installation and configuration

    • Step 1: Install the release bundle to the ipuuser admin account

    • Step 2: Install server packages, upgrade Bow-2000 software and configure networking

  • Step 3: Poplar SDK and tools installation

This chapter covers the first two steps. Step 3, the installation of Poplar SDK and its accompanying tools, is covered in Software installation in the Bow Pod getting started guide.

The system platform installation handles all aspects of the software installation, as well as upgrade and configuration, to bring the system up to a functional ML platform on which the Poplar SDK can be installed. It also leaves system wide configuration files available for all Poplar user accounts, allowing the Bow Pod to be shared between users (as far as ML model size allows sharing of the available IPUs).

The system platform installation step will install all the required software dependencies for software upgrade and network setup between all parts of the system platform. Once the Bow Pod is powered on, this step will automatically detect the number of Bow-2000s in the Bow Pod and configure the server accordingly.

Before performing the system platform installation step, you must:

  1. Create an account dedicated to administration of the Bow-2000s (see Create an account for Bow-2000 administration)

  2. Download the correct Bow-2000 system software release from the Graphcore support portal (see Download the Bow-2000 system software release)

Then the software installation and configuration of both the server and direct attached Bow-2000s can be carried out (see System platform installation and configuration). This involves running two scripts: the bundle install script and the Bow Pod DA install script. It is important to run through the checklist in Checklist before running the Bow Pod DA install script before running the Bow Pod DA install script.

6.1. Create an account for Bow-2000 administration

Firstly a Bow-2000 admin account named ipuuser needs to be created. This account is used as a trusted admin account for Bow-2000 installation and management tasks.

This user account needs sudo rights for running the Bow Pod DA install script. The other administration tools only need network access therefore sudo rights are not required for running these tools.

6.2. Download the Bow-2000 system software release

You need to download the correct Bow-2000 system software release before any software upgrade of the Bow-2000s and the server OS configuration can be performed.

To perform the download, follow these steps:

  1. Login with the Bow-2000 admin account ipuuser

  2. Go to the Graphcore download portal https://graphcore.ai/downloads and download the required IPU-M SOFTWARE release (normally the latest) which you can find under the IPU-POD Systems tab; land it in the server’s /tmp directory

  3. Extract the tarball, which contains the installation scripts, with:

    $ cd /tmp
    $ tar xvfz <downloaded-tar-ball.tar.gz>

Running the install.sh script will copy the Bow-2000 software into the Bow-2000 admin user’s home directory under IPU-M_releases and will automatically create a directory tree with a leading directory name equal to the release package name and version number. This allows several releases to be kept on the server, in case you need to revert to a previous release of the Bow-2000 software. If this is not needed, the older releases (both the unpacked files and the downloaded tar file) can be removed from the server. The current installation or the release to be installed needs to be present.

6.3. System platform installation and configuration

The software installation and configuration of both the server and direct attached Bow-2000s is carried out by running two scripts – the bundle install script (Installing the Bow-2000 software release) and the Bow Pod DA install script (System configuration including network setup).

6.3.1. Installing the Bow-2000 software release

The first script to run is the bundle install script that installs the server tools for Bow-2000 management, as well as the binaries used for a later software upgrade of Bow-2000s.

This initial install doesn’t start an upgrade of the Bow-2000s, but instead prepares the current user to be able to run the necessary commands for later management tasks.


If you are installing IPU-M software version 2.3.2, you need to perform two extra steps before running the install script (Listing 6.1).

  1. Run the following

    $ mkdir $HOME/.rack_tool
  2. Set the environment variable POD_SIZE to the appropriate value for the Bow Pod you are targeting. You can also pass this as an argument to the install.sh script. For example, if you are targeting a Bow Pod16, then you would run the following (instead of the command in Listing 6.1):

    $ POD_SIZE=16 ./install.sh
Listing 6.1 Command to run IPU-M software install script
$ cd /tmp/IPU-M_SW-<release>
$ ./install.sh
$ exit    # and re-login to have an updated user environment

The bundle install script performs the following tasks:

  1. Loads the release file tree onto a well-defined location in the home directory of the current user performing the installation. The directory is ~/IPU-M_releases.

  2. Installs an admin tool called rack_tool and sets up a config file that controls its behaviour. Also create a symbolic link to rack_tool from ~/.local/bin/rack_tool to rack_tool.py in the release file tree.

See rack_tool for more details on rack_tool and how this is used for Bow-2000 administration.

6.3.2. Checklist before running the Bow Pod DA install script

From version 2.5.0, the release notes for the IPU-M software on the Graphcore downloads portal specify the ‘IPU-M Software Upgrade Path’, listing the valid initial versions which can be upgraded to the release under consideration. Upgrades are only supported from these versions, meaning that it may be required to upgrade from the currently running software release to an intermediate supported initial version, in order to then complete the upgrade to the desired target version.

The current version may be confirmed by running:

$ cd  ~/IPU-M_releases/IPU_M_SW-<release>
$ ./rack_tool status --show-json | jq -r '.[].expectedVersions.ipumSoftware' | sort | uniq

Before running the Bow Pod DA install script, you must know the names of the network devices that will be used in the network connected to the Bow Pod. These devices must be “available” or “unmanaged” for the Bow Pod DA install script to dectect them. For example, if they have previously been configured using netplan, removing these interfaces from /etc/netplan files and running netplan try will make them “unmanaged”.


Be aware that removing the wrong interface from Netplan will make it impossible to log in to the server again using SSH.

You can also provide the network interfaces via command-line options if you run the Bow Pod DA install script in non-interactive mode. For help finding the network interfaces, refer to Section 6.3.7, Discovering network interfaces for non-interactive mode.

6.3.3. System configuration including network setup

The next step is to run the Bow Pod DA install script as root by using sudo. There is no need to do an uninstall before upgrading to a new release.


If user input to the script during installation was incorrect then an uninstall will be required, followed by a new install

$ cd  ~/IPU-M_releases/IPU_M_SW-<release>
$ sudo ./direct-attach-setup install

During installation and configuration, the Bow Pod DA install script will communicate with the software that needs to be running on the Bow-2000. For this reason, the Bow Pod DA install script is bundled with a matching Bow-2000 system software release package that will be installed on the Bow-2000s if not already installed.

The Bow Pod DA install script performs the following tasks:

  1. Identifies and requests installation of the required server OS packages. You can abort and install these manually if required.

  2. Installs and activates a Linux systemd service gc-ipu-network for correct network setup for communication with Bow-2000s, both for Poplar SDK users (RDMA data-plane) as well as for Bow-2000 hardware and software management (management-plane).

  3. Proposes the use of a default IP subnet – you can change the subnet to be used during installation if required. This subnet will be further divided into smaller subnets for the point-to-point RDMA links, IPU-Gateway and BMC network management. These IP addresses are local addresses that are not shared outside the single server system. This means the same subnet can be reused by other servers for their directly attached Bow-2000s.

  4. Checks if a Bow-2000 software upgrade is required and if yes, installs and activates the Bow-2000 system software release on all Bow-2000s so that they are all running the same software. This ensures that the Bow Pod DA install script has matching software running on the Bow-2000s for the remainder of the configuration steps.

  5. Performs the V-IPU configuration of the Bow-2000s by selecting a master Bow-2000 to run the V-IPU controller.

  6. Activates the V-IPU controller for auto-discovery of other Bow-2000s, referred to as discovery of V-IPU agents in the text output from the Bow Pod DA install script.

  7. Creates a V-IPU cluster from the discovered V-IPU agents.

  8. Tests the V-IPU cluster by checking if cabling and link quality is as expected and shows the cluster test results.

  9. Creates a V-IPU partition with all IPUs in the discovered Bow-2000s. The partition information is stored in a file in the server system-wide directory /etc/ipuof.conf.d. The single file in this directory is picked up by Poplar and is used for connecting to the Bow-2000s. This file is shared by all users running Poplar sharing the same Bow Pod DA system. When a Poplar instance is starting, Poplar will select a free IPU in this partition and generate an error if there are no more free IPUs to be allocated.

  10. Stores a log of actions taken during the installation and configuration process in the log directory IPU_M_SW/maintenance_tools/logs/.

  11. Asks if the Bow Pod DA install script should setup port forwarding to allow remote web browsers to access the V-IPU controller’s web interface running on the master Bow-2000.


If you have an Ubuntu 20.04 system, then you need to uninstall the NetworkManagerService (installed by default) and stop DHCP before running the install script (the install script takes care of the DHCP setup). You can use the following commands:

$ sudo apt-get purge network-manager
$ sudo /etc/init.d/isc-dhcp-server stop

6.3.4. Output from bundle install script

From running the bundle install script:

$ ./install.sh

The output should be as follows (example given for software release 2.0.0):

## Copying /tmp/IPU_M_SW-2.0.0 to /home/ipuuser/IPU-M_releases ##
## Symlinking /home/ipuuser/IPU-M_releases/IPU_M_SW-2.0.0/maintenance_tools/
rack_tool.py to /home/ipuuser/.local/bin/rack_tool ##
## No default rack_config.json specified. Set GC_RACK_TOOL_DEFAULT_CONFIG_PATH
to point to default config ##
## Installing pip dependencies ##
## Install completed ##

Note that the comment No default rack_config.json specified can be ignored since this will be resolved by the Bow Pod DA install script setting up the rack_config.json configuration file (see below).

6.3.5. Example output from Bow Pod DA install script

From running the Bow Pod DA install script:

$ cd  ~/IPU-M_releases/IPU_M_SW-<release>
$ sudo ./direct-attach-setup install

The output should be as follows for a Bow Pod16 DA system (example given for software release 2.0.0):

Graphcore Bow Pod Direct Attach install script for SW version: 2.0.0
Please make sure all cables are properly attached according to documentation, and that all Bow-2000(s)
are powered on, before continuing installation.
NOTE: Running this installer will interrupt any ongoing Poplar workloads.
Do you want to continue? (y/n): y

All required packages already installed
How many Bow-2000 are attached? 4
A /24 subnet is required, is okay?  (y/n): y
Management device configuration:

A dedicated network device on this host needs to be connected to the upper RJ-45 network port
of the top Bow-2000, and then cabled downwards in a daisy-chain fashion (see docs for diagram).

Note that only unmanaged devices that are not configured by Netplan or NetworkManager will
be available.

Available network devices:
1 - eno1 Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
2 - br-c2f59026c83d
3 - veth9f42328
Input management network device number or name: 1
eno1 selected as management network device.

Found exactly 4 RNIC devices:
- enp129s0f0 Mellanox Technologies MT28800 Family [ConnectX-5 Ex] (cable detected)
- enp161s0f0 Mellanox Technologies MT28800 Family [ConnectX-5 Ex] (cable detected)
- enp129s0f1 Mellanox Technologies MT28800 Family [ConnectX-5 Ex] (cable detected)
- enp161s0f1 Mellanox Technologies MT28800 Family [ConnectX-5 Ex] (cable detected)
Are all these network interfaces connected to IPU Machines?  (y/n): y
enp129s0f0, enp161s0f0, enp129s0f1, enp161s0f1 selected as RNIC network device(s).

Port forwarding and V-IPU web interface:
The V-IPU provides a web interface on port 8092. This web interface requires
an envoy proxy server running on port 9900. In order to provide external access
to the web interface both ports must be forwarded from the current machine

Port forwarding and BMC web interfaces:
Each one of the connected BMCs provides a web interface on port 443. These ports could be
externally accessed through ports 7800, 7801, 7802, 7803 if wanted

Do you allow the forward of ports 7800, 7801, 7802, 7803, 8092 and 9900 using the detected
external network interface eno2? (y/n): y
Installing and starting service gc-ipu-network.
This service is responsible for setting up networking and starting up the
DHCP servers that
will assign IP addresses to Bow-2000(s).
Created symlink /etc/systemd/system/multi-user.target.wants/gc-ipu-network.service → /etc/systemd/system/gc-ipu-network.service.
Scanning for 4 Bow-2000. Note that this may take some minutes...
| |                              #                 | 0 Elapsed Time: 0:02:40
Four (4) Bow-2000(s) found, in stacking order:
Unit 4:  serial 8204721-0071 - BMC GW mgmt GW rnic (via enp161s0f1)
Unit 3:  serial 8204721-0084 - BMC GW mgmt GW rnic (via enp161s0f0)
Unit 2:  serial 8204721-0092 - BMC GW mgmt GW rnic (via enp129s0f1)
Unit 1:  serial 8204721-0065 - BMC GW mgmt GW rnic (via enp129s0f0)
All Bow-2000(s) have release IPU-M SW 2.0.0 installed, no upgrade needed.
Stopping all existing V-IPU servers...
\ |   #                                           | 0 Elapsed Time: 0:00:25
Restarting all V-IPU agents...
\ |                                    #          | 0 Elapsed Time: 0:00:29
Removing any existing V-IPU partitions, clusters and agents...
Creating new V-IPU agents and cluster...
Testing cluster, this will take some time...
- |         #                                     | 0 Elapsed Time: 0:02:11

Showing test results for cluster da-cluster
Type   | Duration | Passed | Summary
Sync-Link   | 0.42s    | 6/6    | Sync Link test passed
Cabling     | 0.79s    | 12/12  | All cables connected as expected
IPU-Link    | 139.99s  | 76/76  | All Links Passed
Traffic     | 203.18s  | 1/1    | Traffic test passed
Version     | 0.01s    | 6/6    | All component versions are consistent
Adding V-IPU partition with 16 IPUs...
| |                                               | 0 Elapsed Time: 0:02:26

Please find installation logs at: /home/ipuuser/IPU-M_releases/IPU_M_SW-2.0.
0 /maintenance_tools/ logs/direct-attach-20210304T2105.log

V-IPU web server running at:
BMC-1 web server running at:
BMC-2 web server running at:
BMC-3 web server running at:
BMC-4 web server running at:

Installation completed!!

If you run the Bow Pod DA install script again on an already configured system, it will start by asking you if you want to accept the existing configuration:

Graphcore Bow Pod Direct Attach install script for SW version: 2.0.0

Found existing Direct Attach configuration with the following parameters:
    count :  4
    mgmt  :  eno1
    rnic  :  ['enp129s0f0', 'enp161s0f0', 'enp129s0f1', 'enp161s0f1']
    allow_port_forwarding  :  True
    ext_net_if  :  eno2
    master_gw_ip  :

Do you want to continue with these parameters? If you have experienced
troubles with the install, choose No (y/n): y

The installation will continue in the same way as the first time installation, but without the questions.

6.3.6. Running Bow Pod DA install in non-interactive mode

You can execute an unattended Bow Pod DA install by including the option --non-interactive. If you use this option the following arguments are required:

  1. --count: Indicate the number of Bow-2000s connected

  2. --subnet: Provide a subnet using CIDR a.b.c.d/n to setup the Bow Pod system

  3. --mgmt: Indicate the management network interface connected to Bow-2000s

  4. --rnic: Specify each RNIC device connected to a Bow-2000


$ sudo ./direct-attach-setup install --non-interactive --count 2 --subnet --mgmt dev0  --rnic dev1 --rnic dev2

For help finding the network devices to use with the previous arguments, refer to Discovering network interfaces for non-interactive mode

6.3.7. Discovering network interfaces for non-interactive mode

Finding the network management service in use

Different Linux distributions come with diferent network management services. You will need to know which network manager is being used in order to identify the available network interfaces. Typically, Linux distributions that include a desktop environment (Gnome, Unity, KDE or others) will be shipped with a service named NetworkManager. For Linux distributions intended for servers, that is, without a desktop environment, the service is usually networkd. It is also possible that both services can be found in the system, or none of them.

You can do a quick check to identify the network service in use by running:

  • nmcli: To test if NetworkManager is in use

  • networkctl: To test ifnetworkd is in use

If the service is not active or installed, the previous commands will display errors or warnings indicating that the service is not in use. If both commands fail, it means that another network manager service (for example, ifupdown) or no service is in use

The Bow Pod DA install script will not support cases when NetworkManager and networkd are found to be in use simultaneously.

Finding available network interfaces with NetworkManager

List all devices with the following command

$ nmcli devices

NetworkManager might try to automatically connect new network devices, switching the devices’ states between connecting and disconnected. The Bow Pod DA install script will deem network interfaces as available if they are unmanaged or if they are in connecting or disconnected states. After the Bow Pod DA install script is run the network interfaces selected will be blacklisted from NetworkManager leaving them unmanaged, which will prevent these devices from being automatically managed again by NetworkManager.

Example output

$ nmcli devices
eth0    ethernet  connected     System eth0
eth1    ethernet  connecting  --
eth2    ethernet  disconnected  --
eth3    ethernet  disconnected  --
eth4    ethernet  disconnected  --
eth5    ethernet  disconnected  --
lo      loopback  unmanaged     --

In the example all the network interfaces eth*, except eth0, will be regarded as available.

Finding network interfaces with networkd

List all devices with the following command

$ networkctl

When using networkd, devices will be regarded as available if they are listed as unmanaged (see SETUP column)

Example output

$ networkctl
IDX LINK             TYPE               OPERATIONAL SETUP
1 lo               loopback           carrier     unmanaged
2 eno1             ether              routable    unmanaged
3 eno2             ether              routable    configured
4 enp129s0f0       ether              routable    unmanaged
5 enp129s0f1       ether              routable    unmanaged
6 enp161s0f0       ether              routable    unmanaged
7 enp161s0f1       ether              routable    unmanaged

In the example eno1 and four other RNIC interfaces (enp*) are in a state that makes the Bow Pod DA install script consider them as available.

Finding network interfaces with another network manager

List all devices with one of the following commands

netstat -i
ip link
ipconfig -a

In this case there are no further checks to determine that the devices were managed, thus any listed network interface will be regarded as available. The Bow Pod DA install will fail at a later point when it cannot assign an IP address or cannot establish a connection with a Bow-2000.

Finding RNIC devices

List devices with InfiniBand support with the following command:

$ find /sys/class/net/*/device/ -type d -name "infiniband"

In the example eth2, eth3, eth4 and eth5 can be used as RNIC devices.

6.4. Bow-2000 maintenance, management and control

6.4.1. Bow Pod DA system software upgrades

The Bow Pod DA install script will, the first time it is run, install and upgrade the software required on the server as well as on the Bow-2000s if needed.

When running the Bow Pod DA install script again with later releases, the install script will:

  1. make any necessary changes to the server setup, install and upgrade server packages

  2. Upgrade all Bow-2000s with the new Bow-2000 software release


Be aware that running a software install and upgrade will require a maintenance window of up to 1.5 hours (Bow Pod16 DA system) where no Poplar workloads are allowed to run. All ongoing Poplar workloads will fail due to the Bow-2000s going through a reset cycle as well as a system test cycle. Note that future releases of the Bow-2000 upgrade tools will significantly reduce this time.

6.4.2. Hardware management of Bow-2000 via BMC management interface

BMC management and operation are available via:

  • SSH login to the BMC command line on each Bow-2000

  • OpenBMC tool openbmctool.py. This tool is found here: ~/IPU-M_releases/IPU_M_SW_<release_version>/bmc/bmc_software/openbmctool.py

  • BMC web UI

The URLs and IP addresses of each BMC are provided by the Bow Pod DA install script and are in the /var/lib/gc-ipu-network/config.json file. They can also be found in the installation log.

IP addresses can also be found in the /var/lib/gc-ipu-network/config.json file, which is probably a better way than having to look through install log.

If you have a browser running locally on the direct attach server, the BMC web UI can be reached by opening the URL https://<BMC_IP_address> where BMC_IP_address can be found by running the following command - note this is only available if you enabled port forwarding during installation:

$ grep "Unit " ~/IPU-M_releases/IPU_M_SW_<release_version>/maintenance_tools/logs/direct-attach-<date&time>.log | cut -d " " -f 7-8,13-14

This example is for a Bow Pod16 DA system so there are four BMC IP addresses, one per Bow-2000. Unit 1 (Bow-2000 #1) is shown at the bottom which reflects the physical placement of the Bow-2000s in the rack:

Unit 4: BMC
Unit 3: BMC
Unit 2: BMC
Unit 1: BMC

The URLs are also listed in the installation logs so if you disabled port forwarding during installation then you can use the following method instead.

They are listed as lines beginning with “BMC-<n> web server running at” in the latest installation logs which can be found here: ~/IPU-M_releases/IPU_M_SW_<release_version>/maintenance_tools/logs/direct-attach-<date&time>.log. In this case however Unit 1 (Bow-2000 #1) is at the top of the list, which is the reverse order of the physical Bow-2000 placement in the rack:

BMC-1 web server running at:
BMC-2 web server running at:
BMC-3 web server running at:
BMC-4 web server running at:

The standard BMC web server port 443 is mapped to unique port numbers as follows:

Unit 4: BMC web server: https://<direct-attach-server>:7803
Unit 3: BMC web server: https://<direct-attach-server>:7802
Unit 2: BMC web server: https://<direct-attach-server>:7801
Unit 1: BMC web server: https://<direct-attach-server>:7800

Refer to the BMC user guide for more details about openbmctool and the BMC web UI.

6.4.3. V-IPU management via IPU-Gateway command line

The Bow-2000 offers an SSH-based itadmin account on the IPU-Gateway allowing access to the vipu-admin command line interface (CLI). This CLI is not intended for daily operation of the Bow-2000s but can be used for troubleshooting if necessary.

The V-IPU Admin Guide contains the required information and should be consulted for details. Make sure the selected document version matches the first two version numbers (major.minor) of the V-IPU software running on the master Bow-2000. To find the version number of the software, run the command vipu-admin --version.