Intel PVC GPUs
Introduction
The ACES cluster has as total of 120 Intel Data Center Max GPU 1100 GPUs Throughout this documentation, these GPUs are referred to as the Intel PVC (Ponte Vecchio) GPUs.
Accessing Intel PVC GPUs
Interactive
Access a Intel PVC compute node interactively using srun
with the resource options --partition=pvc
and --gres=gpu:pvc:<num_gpus>
.
Load all the necessary modules
Next, you can create a python virtual environment for your project following the Intel AI Frameworks and Tools Selector
Alternatively, we have created a shared Intel AI environment including the Intel extensions for PyTorch and TensorFlow for you to use on the ACES cluster. You can activate it by running
Here is a list of the packages in the shared environment.Package Version
---------------------------------- ----------------------
absl-py 1.4.0
annotated-types 0.7.0
astunparse 1.6.3
cachetools 5.5.0
certifi 2024.8.30
cffi 1.17.1
charset-normalizer 3.4.0
cloudpickle 3.0.0
deepspeed 0.14.2
filelock 3.16.1
flatbuffers 24.3.25
fsspec 2024.9.0
gast 0.6.0
google-auth 2.35.0
google-auth-oauthlib 1.2.1
google-pasta 0.2.0
grpcio 1.66.2
h5py 3.12.1
hjson 3.1.0
idna 3.10
importlib_metadata 8.5.0
intel_extension_for_pytorch 2.1.40+xpu
intel_extension_for_tensorflow 2.15.0.1
intel_extension_for_tensorflow_lib 2.15.0.1.2
intel_optimization_for_horovod 0.28.1.5
Jinja2 3.1.4
keras 2.15.0
libclang 18.1.1
Markdown 3.7
MarkupSafe 3.0.1
ml-dtypes 0.3.2
mpmath 1.3.0
networkx 3.2.1
ninja 1.11.1.1
numpy 1.26.4
oauthlib 3.2.2
oneccl-bind-pt 2.1.400+xpu
opt_einsum 3.4.0
packaging 24.1
pillow 10.4.0
pip 23.0.1
protobuf 4.23.4
psutil 6.0.0
py-cpuinfo 9.0.0
pyasn1 0.6.1
pyasn1_modules 0.4.1
pycparser 2.22
pydantic 2.9.2
pydantic_core 2.23.4
pynvml 11.5.3
PyYAML 6.0.2
requests 2.32.3
requests-oauthlib 2.0.0
rsa 4.9
setuptools 58.1.0
six 1.16.0
sympy 1.13.3
tensorboard 2.15.2
tensorboard-data-server 0.7.2
tensorflow 2.15.1
tensorflow-estimator 2.15.0
tensorflow-io-gcs-filesystem 0.37.1
termcolor 2.5.0
torch 2.1.0.post3+cxx11.abi
torchaudio 2.1.0.post3+cxx11.abi
torchvision 0.16.0.post3+cxx11.abi
tqdm 4.66.5
typing_extensions 4.12.2
urllib3 2.2.3
Werkzeug 3.0.4
wheel 0.44.0
wrapt 1.14.1
zipp 3.20.2
Then set the environment variables for use with the oneAPI toolkits
Run your python script
Alternatively, you can copy our ACES PVC training materials to your personal scratch directory and run a sample script.
cp -r /scratch/training/aces_pvc_tutorial $SCRATCH
cd $SCRATCH/aces_pvc_tutorial/pytorch/exercises/
python cifar10_pvc_solution.py
Job Submission
Intel PVCs can be accessed via slurm with the resource options --partition=pvc
and --gres=gpu:pvc:<num_gpus>
.
The folowing is an example of a job script.
#!/bin/bash
##NECESSARY JOB SPECIFICATIONS
#SBATCH --job-name=pt_demo
#SBATCH --time=01:00:00
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --nodes=1
#SBATCH --mem=50G
#SBATCH --output=pt_demo.%j
#SBATCH --gres=gpu:pvc:1
#SBATCH --partition=pvc
echo $SLURM_JOB_ID
hostname
# load all the necessary modules
module purge
module load WebProxy
module load intelpython/2024.1.0_814
module load intel/2023.07
# activate the shared virtual environment
source /sw/hprc/sw/Python/virtualenvs/intelpython/2024.1.0_814/intel-ai-python-env/bin/activate
# sets environment variables for use with the oneAPI toolkits
source /sw/hprc/sw/oneAPI/2024.2/setvars.sh
# change directory to your script
cd $SCRATCH/<path-to-your-script>
# executable command
python <name-of-script>.py
Monitor utilization
If you need to monitor the resource utilization on the PVC node(s), you may launch a VNC interactive job through the portal. Make sure to select Intel GPU Max (PVC)
as the node type.
In the launched VNC session, load the modules and activate the environment, for example,
module purge
module load WebProxy
module load intelpython/2024.1.0_814
module load intel/2023.07
source /sw/hprc/sw/Python/virtualenvs/intelpython/2024.1.0_814/intel-ai-python-env/bin/activate
source /sw/hprc/sw/oneAPI/2024.2/setvars.sh
# change directory to your script
cd $SCRATCH/<path-to-your-script>
# executable command and run it in the background
python <name-of-script>.py &
Then you may use either of the two commands below to monitor gpu utilization which are detailed in the following sections.
sysmon
$ sysmon -h
Usage: ./sysmon [options]
Options:
--processes [-p] Print short device information and running processes (default)
--list [-l] Print list of devices and subdevices
--details [-d] Print detailed information for all of the devices and subdevices
--help [-h] Print help message
--version Print version
This utility provides basic information about the GPUs on a node, including the list of processes that are attached to the GPU at the moment.
The Process mode (default mode) dumps short information about all the available GPUs and running processes. Example output of process mode:
$ sysmon
=====================================================================================
GPU 0: Intel(R) Data Center GPU Max 1100 PCI Bus: 0000:1b:00.0
Vendor: Intel(R) Corporation Driver Version: 1.3.26516 Subdevices: 0
EU Count: 448 Threads Per EU: 8 EU SIMD Width: 16 Total Memory(MB): 46679.2
Core Frequency(MHz): 1400.0 of 1550.0 Core Temperature(C): unknown
=====================================================================================
Running Processes: 4
PID, Device Memory Used(MB), Shared Memory Used(MB), GPU Engines, Executable
4809, 2.2, 0.0, COMPUTE, /usr/bin/xpumd
2651639, 5.2, 0.0, COMPUTE;DMA, python
2651661, 46213.8, 0.0, COMPUTE;DMA, python
2652076, 2.2, 0.0, UNKNOWN, sysmon
=====================================================================================
GPU 1: Intel(R) Data Center GPU Max 1100 PCI Bus: 0000:21:00.0
Vendor: Intel(R) Corporation Driver Version: 1.3.26516 Subdevices: 0
EU Count: 448 Threads Per EU: 8 EU SIMD Width: 16 Total Memory(MB): 46679.2
Core Frequency(MHz): 200.0 of 1550.0 Core Temperature(C): unknown
=====================================================================================
Running Processes: 4
PID, Device Memory Used(MB), Shared Memory Used(MB), GPU Engines, Executable
4809, 2.2, 0.0, COMPUTE, /usr/bin/xpumd
2651639, 0.4, 0.0, COMPUTE, python
2651661, 6.9, 0.0, COMPUTE, python
2652076, 2.2, 0.0, UNKNOWN, sysmon
=====================================================================================
GPU 2: Intel(R) Data Center GPU Max 1100 PCI Bus: 0000:29:00.0
Vendor: Intel(R) Corporation Driver Version: 1.3.26516 Subdevices: 0
EU Count: 448 Threads Per EU: 8 EU SIMD Width: 16 Total Memory(MB): 46679.2
Core Frequency(MHz): 200.0 of 1550.0 Core Temperature(C): unknown
=====================================================================================
Running Processes: 4
PID, Device Memory Used(MB), Shared Memory Used(MB), GPU Engines, Executable
4809, 2.2, 0.0, COMPUTE, /usr/bin/xpumd
2651639, 0.4, 0.0, COMPUTE, python
2651661, 6.9, 0.0, COMPUTE, python
2652076, 2.2, 0.0, UNKNOWN, sysmon
=====================================================================================
GPU 3: Intel(R) Data Center GPU Max 1100 PCI Bus: 0000:2d:00.0
Vendor: Intel(R) Corporation Driver Version: 1.3.26516 Subdevices: 0
EU Count: 448 Threads Per EU: 8 EU SIMD Width: 16 Total Memory(MB): 46679.2
Core Frequency(MHz): 200.0 of 1550.0 Core Temperature(C): unknown
=====================================================================================
Running Processes: 4
PID, Device Memory Used(MB), Shared Memory Used(MB), GPU Engines, Executable
4809, 2.2, 0.0, COMPUTE, /usr/bin/xpumd
2651639, 0.4, 0.0, COMPUTE, python
2651661, 4.4, 0.0, COMPUTE, python
2652076, 2.2, 0.0, UNKNOWN, sysmon
To monitor the usage periodically pair it with linux's watch utility:
xpumcli
See the XPU Manager CLI help info
$ xpumcli -h
Intel XPU Manager Command Line Interface -- v1.2
Intel XPU Manager Command Line Interface provides the Intel data center GPU model and monitoring capabilities. It can also be used to change the Intel data center GPU settings and update the firmware.
Intel XPU Manager is based on Intel oneAPI Level Zero. Before using Intel XPU Manager, the GPU driver and Intel oneAPI Level Zero should be installed rightly.
Supported devices:
- Intel Data Center GPU
Usage: xpumcli [Options]
xpumcli -v
xpumcli -h
xpumcli discovery
Options:
-h,--help Print this help message and exit
-v,--version Display version information and exit.
Subcommands:
discovery Discover the GPU devices installed on this machine and provide the device info.
topology Get the system topology.
group Group the managed GPU devices.
diag Run some test suites to diagnose GPU.
health Get the GPU device component health status.
policy Get and set the GPU policies.
updatefw Update GPU firmware
config Get and change the GPU settings.
topdown Expected feature.
ps List status of processes.
vgpu Create and remove virtual GPUs in SRIOV configuration.
stats List the GPU aggregated statistics since last execution of this command or XPU Manager daemon is started.
dump Dump device statistics data.
log Collect GPU debug logs.
agentset Get or change some XPU Manager settings.
amcsensor List the AMC real-time sensor readings.
A full list of available metrics can be found with the dump command.
$ xpumcli dump
Dump device statistics data.
Usage: xpumcli dump [Options]
xpumcli dump -d [deviceIds] -t [deviceTileIds] -m [metricsIds] -i [timeInterval] -n [dumpTimes]
xpumcli dump --rawdata --start -d [deviceId] -t [deviceTileId] -m [metricsIds]
xpumcli dump --rawdata --list
xpumcli dump --rawdata --stop [taskId]
Options:
-h,--help Print this help message and exit
-j,--json Print result in JSON format
-d,--device The device IDs or PCI BDF addresses to query. The value of "-1" means all devices.
-t,--tile The device tile IDs to query. If the device has only one tile, this parameter should not be specified.
-m,--metrics Metrics type to collect raw data, options. Separated by the comma.
0. GPU Utilization (%), GPU active time of the elapsed time, per tile
1. GPU Power (W), per tile
2. GPU Frequency (MHz), per tile
3. GPU Core Temperature (Celsius Degree), per tile
4. GPU Memory Temperature (Celsius Degree), per tile
5. GPU Memory Utilization (%), per tile
6. GPU Memory Read (kB/s), per tile
7. GPU Memory Write (kB/s), per tile
8. GPU Energy Consumed (J), per tile
9. GPU EU Array Active (%), the normalized sum of all cycles on all EUs that were spent actively executing instructions. Per tile.
10. GPU EU Array Stall (%), the normalized sum of all cycles on all EUs during which the EUs were stalled. Per tile.
At least one thread is loaded, but the EU is stalled. Per tile.
11. GPU EU Array Idle (%), the normalized sum of all cycles on all cores when no threads were scheduled on a core. Per tile.
12. Reset Counter, per tile.
13. Programming Errors, per tile.
14. Driver Errors, per tile.
15. Cache Errors Correctable, per tile.
16. Cache Errors Uncorrectable, per tile.
17. GPU Memory Bandwidth Utilization (%)
18. GPU Memory Used (MiB)
19. PCIe Read (kB/s), per GPU
20. PCIe Write (kB/s), per GPU
21. Xe Link Throughput (kB/s), a list of tile-to-tile Xe Link throughput.
22. Compute engine utilizations (%), per tile.
23. Render engine utilizations (%), per tile.
24. Media decoder engine utilizations (%), per tile.
25. Media encoder engine utilizations (%), per tile.
26. Copy engine utilizations (%), per tile.
27. Media enhancement engine utilizations (%), per tile.
28. 3D engine utilizations (%), per tile.
29. GPU Memory Errors Correctable, per tile. Other non-compute correctable errors are also included.
30. GPU Memory Errors Uncorrectable, per tile. Other non-compute uncorrectable errors are also included.
31. Compute engine group utilization (%), per tile.
32. Render engine group utilization (%), per tile.
33. Media engine group utilization (%), per tile.
34. Copy engine group utilization (%), per tile.
35. Throttle reason, per tile.
36. Media Engine Frequency (MHz), per tile
-i The interval (in seconds) to dump the device statistics to screen. Default value: 1 second.
-n Number of the device statistics dump to screen. The dump will never be ended if this parameter is not specified.
--rawdata Dump the required raw statistics to a file in background.
--start Start a new background task to dump the raw statistics to a file. The task ID and the generated file path are returned.
--stop Stop one active dump task.
--list List all the active dump tasks.
Usage example for dump command:
$ xpumcli dump -d 0 -m 0,1,2,3,4,5
Timestamp, DeviceId, GPU Utilization (%), GPU Power (W), GPU Frequency (MHz), GPU Core Temperature (Celsius Degree), GPU Memory Temperature (Celsius Degree), GPU Memory Utilization (%)
11:01:41.000, 0, 0.00, 27.90, 0, 25.00, 21.00, 0.05
11:01:42.000, 0, 0.00, 28.87, 0, 24.50, 21.00, 0.05
11:01:43.000, 0, 0.00, 28.76, 0, 25.00, 21.00, 0.05
11:01:44.000, 0, 0.00, 28.77, 0, 24.00, 21.00, 0.05
11:01:45.000, 0, 0.00, 28.78, 0, 23.50, 21.00, 0.05
11:01:46.000, 0, 0.00, 28.84, 0, 24.00, 21.00, 0.05
11:01:47.000, 0, 0.00, 28.73, 0, 24.50, 21.00, 0.05
show_pvc_features
This script shows the current arrangement of nodes with PVCs composed over Liqid PCIe fabrics with and without Xe Link bridges. Note, there are now PVCs in both PCIe Gen4 and Gen5 fabrics. All nodes with Xe Link bridges are in Gen5 fabrics.
$ show_pvc_features
HOSTNAME AVAIL_FEATURES GRES STATE
ac010 gen4_fabric gpu:pvc:4 mixed
ac011 gen4_fabric gpu:pvc:4 mixed
ac012 gen4_fabric gpu:pvc:4 mixed
ac013 gen4_fabric gpu:pvc:4 mixed
ac023 gen4_fabric gpu:pvc:4 idle
ac024 gen4_fabric gpu:pvc:8 idle
ac025 gen4_fabric gpu:pvc:4 mixed
ac026 gen5_fabric gpu:pvc:6 reserved
ac030 gen5_fabric gpu:pvc:8 reserved
ac034 gen5_fabric gpu:pvc:4 reserved
ac039 gen5_fabric gpu:pvc:4 reserved
ac050 gen5_nonfabric gpu:pvc:2 mixed
ac051 gen5_nonfabric gpu:pvc:2 drained*
ac062 gen4_fabric gpu:pvc:4 mixed
ac068 gen4_fabric gpu:pvc:8 idle
ac078 gen4_fabric gpu:pvc:4 mixed
ac079 gen4_fabric gpu:pvc:4 mixed
ac081 gen5_fabric,xelink4 gpu:pvc:4 reserved
ac082 gen5_fabric,xelink2 gpu:pvc:2 reserved
ac083 gen5_fabric gpu:pvc:2 reserved
ac085 gen5_fabric,xelink4 gpu:pvc:4 reserved
ac086 gen5_fabric,xelink2 gpu:pvc:2 reserved
ac087 gen5_fabric,xelink2 gpu:pvc:2 reserved
ac089 gen5_fabric,xelink4 gpu:pvc:4 reserved
ac094 gen5_fabric,xelink2 gpu:pvc:2 reserved
ac095 gen5_fabric,xelink2 gpu:pvc:2 reserved
ac097 gen5_fabric,xelink2 gpu:pvc:2 reserved
ac099 gen5_fabric,xelink4 gpu:pvc:4 reserved
ac100 gen5_fabric,xelink2 gpu:pvc:2 allocated
ac101 gen5_fabric gpu:pvc:4 reserved
ac102 gen5_fabric gpu:pvc:4 reserved
ac103 gen5_fabric,xelink2 gpu:pvc:2 idle
This script shows the current arrangement of nodes with PVCs composed over Liqid PCIe fabrics with and without Xe Link bridges.
Note, there are now PVCs in both PCIe Gen4 and Gen5 fabrics. All nodes with Xe Link bridges are in Gen5 fabrics.
Use the --constraint=xelink2 or --constraint=xelink4 sbatch option to request a node with a 2-way or 4-way Xe Link bridge.