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.
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:
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:
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:
* 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.
#!/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:
Mas também podemos executar todos os parâmetros na diretiva da linha de comando.
Com o comando abaixo podemos verificar todos os computer nodes disponíveis na Nuvem da Intel:
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:
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:
###############################################################################
#
# 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.
> 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:
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:
########################################################################
# 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!”