A
nuvem da Intel trabalha com processamento distribuído, e então para entendermos o funcionamento, primeiramente criaremos com o comando a seguir, 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 com o 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 script. Vejam o exemplo a seguir:
qsub -l nodes=1:gpu:ppn=2 -d . hello-world-example
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:
cat hello-world-example.o911927
########################################################################
# Date: Tue 29 Jun 2021 12:08:02 AM PDT
# Job ID: 911927.v-qsvr-1.aidevcloud
# User: u481275
# Resources: neednodes=1:gpu:ppn=2,nodes=1:gpu:ppn=2,walltime=06:00:00
########################################################################
* Hello world from compute server login-2!
* The current directory is /home/u481275.
* Compute server's CPU model and number of logical CPUs:
* Python available to us:
/opt/intel/inteloneapi/intelpython/latest/bin/python
Python 3.7.9 :: Intel Corporation
*Bye
########################################################################
# End of output for job 911927.v-qsvr-1.aidevcloud
# Date: Tue 29 Jun 2021 12:08:18 AM PDT
########################################################################
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 cabelo@opensuse.org
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 novamente 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 cabelo@opensuse.org -d . hello-world-example-2
Com o comando abaixo podemos também 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 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:
Propriedades dos dispositivos por nome:
- arria10
- e-2176g
- gen9
- gold6128
- i9-10920x
- iris_xe_max
- plat8153
Quantidade do dispositivo:
Uso desejado:
- batch
- fpga_compile
- fpga_runtime
- jupyter
- renderkit