A poderosa nuvem: Intel® DevCloud com GPU Iris Xe Max

A poderosa nuvem: Intel® DevCloud com GPU Iris Xe Max

Neste artigo veremos como utilizar o poder computacional das últimas gerações de hardware Intel na nuvem DevCloud gratuitamente mas por tempo limitado. Além de processadores de última geração, poderemos testar a nova e primeira GPU da Intel Dedicada Iris Xe MAX.

Introdução Devcloud:

DevCloud é uma nuvem de computação distribuída baseado projeto PBS desenvolvido pela NASA 1991, a principal função era gerenciar trabalhos em lote muito similar ao agendador de tarefas e gerenciamento de nós e recursos. Esta nuvem da Intel proporciona diversas arquiteturas de hardware de última geração, como CPUs, FPGA GPU.

Sendo assim é possível utilizar a tecnologia Iris Xe Max. Este modelo é a primeira GPU dedicada da Intel. O seu desempenho diferenciado é devido ao suporte PCI Express 4.0 e total integração com a tecnologia Intel Deep Link. Onde sua principal função é praticamente combinar recursos da CPU e da GPU para otimizar o desempenho total do equipamento. Mas Ressalto que esta tecnologia Iris Xe Max trabalha em conjunto com o processador Intel Core de 11ª geração.

https://static.vivaolinux.com.br/imagens/artigos/comunidade/Intel_iris_xe_max.jpg

Antes de começarmos, devemos efetuar o cadastro na Nuvem da Intel. O cadastro é gratuito, porém limitado. Para estender o limite, seu projeto de desenvolvimento deve ser submetido para aumentar o período de testes. Sendo assim, clique no link https://software.intel.com/content/www/us/en/develop/tools/devcloud.html , selecione a opção Intel® DevCloud for oneAPI e efetue o seu cadastro preenchendo os dados solicitados.

Mais informações sobre a configuração e acesso no Linux via ssh, podemos obter nesta URL: https://devcloud.intel.com/oneapi/documentation/connect-with-ssh-linux-macos/

Conceitos

A nuvem da Intel trabalha com processamento distribuído, e então para entendermos o funcionamento, primeiramente criaremos o script com o nome hello-world-example com o conteúdo abaixo:

$ tee>hello-world-example <<EOF
cd $PBS_O_WORKDIR
echo “* Hello world from compute server `hostname`!”
echo “* The current directory is ${PWD}.”
echo “* Compute server’s CPU model and number of logical CPUs:”
lscpu | grep ‘Model name\|^CPU(s)’
echo “* Python available to us:”
which python
python –version
echo “* The job can create files, and they will be visible back in the Notebook.” > newfile.txt
sleep 10
echo “*Bye”
EOF

Agora como script criado, o submeteremos o trabalho no qual devemos utilizar o comando qsub. O parâmetro -l é utilizado para utilizar o hardware solicitado onde nodes = QTDE DE NÓS, gpu = PROCESSADOR GRÁFICO e ppn = a quantidade de processadores. Já o parâmetro -d . indica o path de trabalho (localização atual) e por último o nome do scritpt. Vejam o exemplo a seguir:

$ qsub -l nodes=1:gpu:ppn=2 -d .  hello-world-example
911788.v-qsvr-1.aidevcloud

Se tudo funcionou corretamente, após alguns segundos, veremos armazenados em disco 2 arquivos de saída que representam o resultado do processamento, hello-world-example.eXXXXXX e hello-world-example.oXXXXXX. Um arquivo .eXXXXXX contém os erros do script (se existir), já o .e911788 contem a saída padrão do script submetido posteriormente. Abaixo o exemplo do seu conteúdo:

* Hello world from compute server s001-n140!
* The current directory is /home/u45169.
* Compute server’s CPU model and number of logical CPUs:
CPU(s):                          12
Model name:                      Intel(R) Xeon(R) E-2176G CPU @ 3.70GHz
* Python available to us:
/opt/intel/inteloneapi/intelpython/latest/bin/python
Python 3.7.9 :: Intel Corporation
*Bye

A seguir um resumo da sintaxe anterior, e também a adição de alguns itens para um melhor aproveitamento dos arquivos para processamento distribuído utilizando o formato PBS (Portable Batch System). Tomaremos como base o script anterior.

$ tee>hello-world-example-2 <<EOF
#!/bin/bash
#Nome do trabalho:
#PBS -N My-Job-InDevCloud
#Tempo de execução 1 hora:
#PBS -l walltime=1:00:00
#Nome do arquivo de erro:
#PBS -e My-Job-with-Error.err
#Solicita 1 nó e 2 processadores:
#PBS -l nodes=1:ppn=2
#Envio de Email
#PBS -M [email protected]
cd $PBS_O_WORKDIR
echo “* Hello world from compute server hostname!”
echo “* The current directory is ${PWD}.”
echo “* Compute server’s CPU model and number of logical CPUs:”
lscpu | grep ‘Model name|^CPU(s)’
echo “* Python available to us:”
which python
python –version
echo “* The job can create files, and they will be visible back in the Notebook.” > newfile.txt
sleep 10
echo “*Bye”
EOF

Após estas alterações podemos submeter novamento o JOB para execução novamente:

$ qsub -l nodes=1:gpu:ppn=2 -d .  hello-world-example-2

Mas também podemos executar todos os parâmetros na diretiva da linha de comando.

$ qsub -l nodes=1:gpu:ppn=2 -l walltime=1:00:00 -M [email protected] -d . hello-world-example-2

Com o comando abaixo podemos verificar todos os computer nodes disponíveis na Nuvem da Intel:

$ pbsnodes -a

s012-n001
    state = job-exclusive
    power_state = Running
    np = 2
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
    ntype = cluster
    jobs = 0-1/911898.v-qsvr-1.aidevcloud
    status = rectime=1624947718,macaddr=d4:5d:64:08:e0:1b,cpuclock=Fixed,varattr=,jobs=911898.v-qsvr-1.aidevcloud(cput=114,energy_used=0,mem=382320kb,vmem=34364495240kb,walltime=626,Error_Path=/dev/pts/0,Output_
Path=/dev/pts/0,session_id=2291524),state=free,netload=881915012074,gres=,loadave=2.00,ncpus=24,physmem=32558924kb,availmem=33789804kb,totmem=34656072kb,idletime=1003560,nusers=4,nsessions=4,sessions=525427 11938
32 1193846 2291524,uname=Linux s012-n001 5.4.0-52-generic #57-Ubuntu SMP Thu Oct 15 10:57:00 UTC 2020 x86_64,opsys=linux
    mom_service_port = 15002
    mom_manager_port = 15003

Para verificar quantos nós apresentam a GPU Iris XE MAX, basta incluir o seguinte comando:

$ pbsnodes | sort | grep properties  |grep iris_xe_max
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,dual_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
    properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu


Para verificar as características dos nós presentes no sistema, basta utilizar o seguinte comando abaixo:

$ pbsnodes | sort | grep properties
properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
properties = core,cfl,i9-10920x,ram32gb,net1gbe,gpu,iris_xe_max,quad_gpu
properties = xeon,cfl,e-2176g,ram64gb,net1gbe,gpu,gen9
properties = xeon,cfl,e-2176g,ram64gb,net1gbe,gpu,gen9
properties = xeon,cfl,e-2176g,ram64gb,net1gbe,gpu,gen9
properties = xeon,cfl,e-2176g,ram64gb,net1gbe,gpu,gen9
properties = xeon,cfl,e-2176g,ram64gb,net1gbe,gpu,gen9
properties = xeon,cfl,e-2176g,ram64gb,net1gbe,gpu,gen9
properties = xeon,skl,ram384gb,net1gbe,renderkit
properties = xeon,skl,ram384gb,net1gbe,renderkit
properties = xeon,skl,ram384gb,net1gbe,renderkit
properties = xeon,skl,ram384gb,net1gbe,renderkit

As propriedades são usadas para descrever vários recursos disponíveis nos nós de computação, como: tipo e nome da CPU, modelo e nome do acelerador, DRAM disponível, tipo de interconexão, número de dispositivos aceleradores disponíveis e seu tipo e uso pretendido ou recomendado.

Algumas das propriedades para das classes de dispositivos:

  • core
  • fpga
  • gpu
  • xeon

Propriedades dos dispositivos por nome:

  • arria10
  • e-2176g
  • gen9
  • gold6128
  • i9-10920x
  • iris_xe_max
  • plat8153

Quantidade do dispositivo:

  • dual_gpu
  • quad_gpu


Uso desejado:

  • batch
  • fpga_compile
  • fpga_runtime
  • jupyter
  • renderkit

Mão na massa com a GPU Iris Xe Max

Agora conecte na DevCloud via ssh utilizando o comando abaixo com sua conta devidamente configurada. Se tudo estiver corretamente funcionando teremos a tela abaixo:

$ ssh devcloud
###############################################################################
#
# Welcome to the Intel DevCloud for oneAPI Projects!
#
# 1) See https://devcloud.intel.com/oneapi/ for instructions and rules for
# the OneAPI Instance.
#
# 2) See https://github.com/intel/FPGA-Devcloud for instructions and rules for
# the FPGA Instance.
#
# Note: Your invitation email sent to you contains the authentication URL.
#
# If you have any questions regarding the cloud usage, post them at
# https://software.intel.com/en-us/forums/intel-devcloud
#
# Intel DevCloud Team
#
###############################################################################
#
# Note: Cryptocurrency mining on the Intel DevCloud is forbidden.
# Mining will lead to immediate termination of your account.
#
###############################################################################
Last login: Mon Jun 28 22:51:06 2021 from 10.9.0.249
u99999@login-2:~$

Agora criaremos o arquivo ola_Iris_XE_Max.sh com o seguinte conteudo abaixo.

$ tee >  ola_Iris_XE_Max.sh <<EOF
> Echo #!/bin/bash
> wget http://service.assuntonerd.com.br/downloads/cmake-gpu.tar.gz   
> tar -zxvf cmake-gpu.tar.gz  
> mkdir -p cmake-gpu/build  
> cd cmake-gpu/build  
> cmake ..  
> make run
> EOF

Este script efetuara o download do código fonte exemplo em C, que utiliza um loop for, e conta até 15 uttilizando a GPU, descompacta o arquivo .tar.gz, cria a pasta build efetua a compilação e executa.

Para testar o funcionamento execute o seguinte comando para submeter o script para processamento:

$ qsub -l nodes=1:iris_xe_max:ppn=2 -d . ola_Iris_XE_Max.sh
911915.v-qsvr-1.aidevcloud


Após alguns segundos digite ls e verifique o conteudo do arquivo de saida com o comando cat. Veremos o seguinte resultado:

$ cat ola_Iris_XE_Max.sh.o911915


########################################################################
#      Date:           Mon 28 Jun 2021 11:45:08 PM PDT
#    Job ID:           911915.v-qsvr-1.aidevcloud
#      User:           u68892
# Resources:           neednodes=1:iris_xe_max:ppn=2,nodes=1:iris_xe_max:ppn=2,walltime=06:00:00
########################################################################

cmake-gpu/CMakeLists.txt
cmake-gpu/License.txt
cmake-gpu/README.md
cmake-gpu/sample.json
cmake-gpu/src/
cmake-gpu/src/CMakeLists.txt
cmake-gpu/src/main.cpp
cmake-gpu/third-party-programs.txt
— The C compiler identification is GNU 9.3.0
— The CXX compiler identification is Clang 12.0.0
— Check for working C compiler: /usr/bin/cc
— Check for working C compiler: /usr/bin/cc — works
— Detecting C compiler ABI info
— Detecting C compiler ABI info – done
— Detecting C compile features
— Detecting C compile features – done
— Check for working CXX compiler: /glob/development-tools/versions/oneapi/2021.2/inteloneapi/compiler/2021.2.0/linux/bin/dpcpp
— Check for working CXX compiler: /glob/development-tools/versions/oneapi/2021.2/inteloneapi/compiler/2021.2.0/linux/bin/dpcpp — works
— Detecting CXX compiler ABI info
— Detecting CXX compiler ABI info – done
— Detecting CXX compile features
— Detecting CXX compile features – done
— Configuring done
— Generating done
— Build files have been written to: /home/u47345/cmake-gpu/build
Scanning dependencies of target cmake-gpu
[ 50%] Building CXX object src/CMakeFiles/cmake-gpu.dir/main.cpp.o
[100%] Linking CXX executable ../cmake-gpu
[100%] Built target cmake-gpu
Scanning dependencies of target build
[100%] Built target build
Scanning dependencies of target run
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[100%] Built target run

########################################################################
# End of output for job 911915.v-qsvr-1.aidevcloud
# Date: Mon 28 Jun 2021 11:45:25 PM PDT
########################################################################

Mais informações no link oficial: Intel® DevCloud https://software.intel.com/content/www/us/en/develop/tools/devcloud.html ou em contato diretamente comigo em [email protected].

“O próximo grande salto evolutivo da humanidade será a descoberta de que cooperar é melhor que competir… Pois colaborar atrai amigos, competir atrai inimigos!”