Computació Python amb Conda
En aquest document, trobaràs la informació necessària sobre com executar el teu codi Python amb les llibreries i paquets que necessitis, utilitzant la potència dels servidors de càlcul.
Introducció
Cada projecte de Python utilitza llibreries diferents com numpy, matplotlib o photontorch, oi?
Però no tothom necessita les mateixes. Per exemple, un usuari a sunset pot necessitar numpy i scipy, mentre que un altre numpy i matplotlib. O fins i tot tu mateix, depenent del projecte en què estiguis treballant, potser necessitaràs llibreries diferents per a cada projecte que facis.
Per tal de separar espais de treball, crearem el que s'anomena "entorn virtual" que bàsicament et permet crear un espai personal on pots instal·lar les teves llibreries sense interferir amb els teus altres projectes. Dins d'aquest espai personal, encara tens accés a tots els teus fitxers; és com treballar en una carpeta de projecte, on tot el que instal·les s'emmagatzema allà.
L'eina per generar aquest entorn virtual personal és conda. Un cop creat l'espai, l'usuari pot accedir o sortir en qualsevol moment per fer ús de les llibreries instal·lades dins.
Això significa que pots estar treballant en els teus scripts i, en el moment que necessitis executar-los, per poder fer ús dels paquets i llibreries instal·lades a l'interior, només cal que activis l'entorn, executis el fitxer i el desactivis si ja has acabat.
Així doncs, seguint amb la guia, el primer pas és comprovar que conda estigui instal·lat i inicialitzar l'aplicació. Un cop conda estigui activat, podràs utilitzar-lo per crear entorns i instal·lar els paquets que necessitis per executar els teus scripts a partir d'ara.
Activar Conda
Aquest pas 0, com s'ha explicat abans, consisteix a inicialitzar Conda al nostre usuari per poder-lo fer servir en els nostres futurs projectes. Això significa que, un cop l'aplicació funcioni, no caldrà tornar-la a configurar.
Comprovar que Conda està instal·lat
Conda està instal·lat per defecte als servidors, però per si de cas, mai està de més comprovar-ho.
>> conda info
Això només mostra la versió de Conda i alguna altra informació sobre camins i directoris.
Inicialitzar Conda
Tot i que està instal·lat, cal inicialitzar-lo. Això es deu al fet que el programa s'emmagatzema a les carpetes compartides del servidor, però hem d'activar-lo al nostre espai d'usuari per poder treballar. Aquest pas només es fa una vegada, la primera vegada.
>> conda init
Com diu el codi, ara cal tancar el terminal i obrir-ne un de nou per aplicar els canvis i la configuració.
Ara, per defecte, el sistema s'executa dins de l'entorn virtual base, que s'indica entre parèntesis:
(base) >>
Complicacions Recents: Si aquesta línia (base) no apareix, escriure aquest comandament ho solucionarà (sense necessitat de tancar el terminal i obrir-ne un de nou):
>> source .bashrc
Aquí ja podem instal·lar totes les llibreries que vulguem, però és preferible fer-ho dins d'un espai personal creat per nosaltres, que s'explica a la següent secció.
Per desactivar aquesta configuració automàtica i sortir de l'entorn (base), executa els següents comandaments:
(base) >> conda config --set auto_activate_base false
(base) >> conda deactivate
>>
Ara estem fora de (base) i podem crear tots els entorns virtuals que necessitem/vulguem, cadascun amb configuracions diferents.
Crear un Nou Entorn Virtual
Creació de l'entorn
Per crear un entorn virtual utilitzant l'eina Conda, el primer pas és definir el nom i, opcionalment, la versió de Python que hi s'executarà. Aquesta darrera configuració és opcional; si no s'especifica, s'executarà la versió més recent de Python dins l'entorn.
>> conda create -n projectname # Default
>> conda create -n projectname python=3.10 # Extra posibilities
>> conda create -n projectname python
>> conda create -n projectname scipy=0.15.0
Accés a l'entorn
Un cop creat l'espai, és el moment d'obrir-lo i començar a treballar-hi, com si fos una nova carpeta de projecte. Aquí, com hem explicat abans, pots instal·lar qualsevol llibreria de Python que necessitis.
>> conda activate projectname
Ara notaràs que la línia de comandaments anirà precedida pel nom de l'entorn entre parèntesis. Això significa que l'hem activat correctament i hi hem accedit.
(projectname) >>
(projectname) >>
És molt important estar dins de l'entorn quan instal·les o executes scripts, altrament el sistema no reconeixerà els paquets instal·lats i tu, com a usuari, no els podràs utilitzar.
Activació i desactivació de l'entorn
Recorda: Pots accedir, canviar i sortir entre entorns en qualsevol moment, no s'eliminen!
Com ja hem vist, l'accés a l'entorn creat es fa amb "conda activate nomprojecte".
Cada vegada que iniciïs sessió al teu espai de treball d'usuari, pots activar l'entorn creat en qualsevol moment; els entorns s'allotgen al teu directori local, que és independent dels servidors.
Per sortir de l'entorn (no s'està eliminant) per treballar en un de diferent o simplement perquè ja no l'estàs utilitzant, pots escriure conda deactivate. Fixa't que aquest comandament només funciona quan l'entorn està activat (indicat per parèntesis).
Aquest exemple mostra la llista dels teus entorns virtuals i com accedir-hi i sortir-ne:
>> conda env list
# conda environments:
#
env1 /home/usuaris/sitsc/user/.conda/envs/env1
env2 /home/usuaris/sitsc/user/.conda/envs/env2
base * /opt/conda
>> conda activate env1
(env1) >>
(env1) >> conda deactivate # exit from the first environment
>> # You are outside of the env again, as it no longer shows it in parenthesis
>> # Now it is time to access another one
>> conda activate env2
(env2) >>
(env2) >> conda deactivate
>>
Instal·lació de paquets dins l'entorn
Ara que estem dins del nostre espai de treball (indicat per parèntesis), podem procedir a instal·lar qualsevol llibreria que necessitem. En aquest cas, ens centrarem a mostrar com instal·lar photontorch, però qualsevol altra llibreria també es pot instal·lar.
L'entorn virtual de Conda és útil per a qualsevol tipus de projecte en el qual vulguis treballar, no només per a photontorch. Així que si vols executar altres tipus de fitxers Python, pots crear un entorn diferent amb altres configuracions i llibreries instal·lades.
(projectname) >> conda install pytorch numpy scipy
(projectname) >> pip install photontorch
(projectname) >> conda install tqdm
(projectname) >> conda install matplotlib
(projectname) >> conda install pandoc
Per veure la llista de paquets instal·lats:
(projectname) >> conda list
(projectname) >> pip list
Crear i Executar Fitxers Python als Servidors de Computació
Ara que el nostre espai de treball està correctament configurat amb totes les llibreries que necessitem per executar el nostre codi instal·lades, és el moment de crear i executar els scripts utilitzant els servidors de càlcul. El procediment és el següent:
- Crear el nostre script de Python.
- Accedir a l'entorn (indicat entre parèntesis).
- Executar tots els scripts necessaris als servidors de Calcula.
- Sortir de l'entorn un cop hàgim acabat.
És molt important executar els scripts al servidor de càlcul mentre estem dins de l'entorn creat. D'aquesta manera, els scripts s'executaran llegint les llibreries instal·lades dins (env1).
Creació i edició del nostre script Python
Hi ha diferents maneres d'escriure el nostre codi. La més senzilla a Linux és crear un "fitxer buit" i guardar-lo com a ".py". Per fer-ho, obre el gestor de fitxers, ves a la carpeta on vols guardar els teus fitxers i crea el "fitxer buit" amb el botó dret. Després, afegeix el teu codi i desa'l amb "elmeucodi.py".
L'altra alternativa és utilitzar l'editor de text vi, però és més complex d'utilitzar.
Si vols utilitzar aquesta potent eina, si us plau, visita la guia sobre com utilitzar Jupyter Notebook.
Mostrar i guardar gràfics a Python utilitzant Matplotlib
En cas que et preguntis com traçar gràfics a Python, utilitza la llibreria matplotlib de Python. Aquí tens una guia ràpida per fer-ho dins de l'entorn.
Per instal·lar-la:
(projectname) >> conda install matplotlib
Un cop el gràfic estigui definit, utilitza la funció plt.savefig() abans de plt.show() per crear un fitxer PNG amb el gràfic, i després show() per traçar-lo a la pantalla. D'aquesta manera, encara que estiguis utilitzant la potència dels servidors de càlcul per executar els teus scripts, els fitxers generats s'emmagatzemaran al teu directori local.
Per exemple:
import matplotlib
import matplotlib.pyplot as plt
plt.plot([0, 1, 2, 3, 4], [0, 3, 5, 9, 11])
plt.xlabel('Months')
plt.ylabel('Books Read')
plt.savefig('books_read.png')
plt.show()
Desar el gràfic mostrat depèn de tu, només fent clic al botó "save" (desar). Recorda que el gràfic ja estarà desat amb el comandament plt.savefig().
Executar scripts Python
D'acord, ara tens el teu codi a punt per ser executat i estàs dins de l'entorn, així que és el moment d'utilitzar la potència dels servidors de càlcul per executar el codi.
Per entendre la funcionalitat dels comandaments utilitzats per executar els fitxers als servidors de càlcul, si us plau, revisa la guia de processament per lots (HPC) abans de continuar amb la guia.
Altrament, aquí teniu alguns exemples de com executar codi al servidor de càlcul sunset (podria ser qualsevol altre).
Executar un script Python utilitzant srun
Utilitzant srun, el job s'envia per a execució en temps real. Automàticament, el job s'envia al primer servidor de càlcul que té els recursos requerits escrits per l'usuari, però també es pot especificar amb el comandament -w:
(proyecto) >> cat hello_world.py print("Hello World")
(proyecto) >> srun -p sunset -A sunset -c1 --mem=2000 python hello_world.py ===================================================================== SLURM_JOB_ID = 286028 SLURM_NODE = sunsetc01 SLURM_JOB_PARTITION = sunset ===================================================================== Hello World ===================================================================== JobID 286028: Could not read info. ===================================================================== (proyecto) >>
Executar un Script Python utilitzant sbatch
Una altra manera és utilitzar el comandament sbatch, que s'empra per executar scripts de bash per a una execució posterior.
Bàsicament, la principal diferència amb srun és que els resultats s'escriuen en un fitxer.
Això és molt útil quan volem guardar els resultats o comprovar els valors en qualsevol moment, en lloc de veure'ls directament al terminal com en l'exemple anterior.
Com que sbatch només executa scripts de bash i no de Python, necessitem crear un nou fitxer ".sh" i afegir-hi els comandaments necessaris que obriran Python i executaran el nostre "fitxer.py":
(proyecto) >> cat executable.sh
#Parameters for the new "executable.sh" file
#!/bin/bash
#SBATCH -p sunset #SBATCH -A sunset
#SBATCH -c1
#SBATCH --mem=2000 python helloworld.py
(proyecto) >> sbatch executable.sh #Execute the file in calcula servers Submitted batch job 286046
(proyecto) >> cat slurm-286046.out #Read the output once the job is finished
Hello World
(proyecto) >>
Annex: Guies Addicionals
Eliminar un entorn virtual
Hi ha dues maneres:
A. Eliminant la carpeta
>> rm -rf ~/.conda/envs/projectname/
B. Utilitzant les funcions de Conda
>> conda env remove -n projectname
Veure la llista d'entorns virtuals
>> conda env list
# conda environments:
#
proyecto /home/usuaris/sitsc/usr/.conda/envs/proyecto
proyecto2 /home/usuaris/sitsc/usr/.conda/envs/proyecto2
base * /opt/conda
Create a new environment with the same packages as projectname
Dins de l'entorn projecte, que actua com a plantilla, desa els paràmetres amb:
(projectname) usr@sunsetc01:~$ conda env export > environment.yml
Aquest fitxer s'utilitza per crear còpies en altres màquines (usr2) amb el comandament:
usr2@sunsetc01:~$ conda env create -f /environment.yml
Si l'usuari vol crear un nou entorn amb les mateixes característiques al mateix ordinador, cal editar el fitxer. Per fer-ho:
- Canvia el nom a un de nou. Per exemple: name:projectname2
- Canvia el prefix a un de nou. Per exemple: prefix: ~/.conda/envs/projectname2
Finalment, accedeix al nou entorn:
usr@sunsetc01:~$ conda env create -f /environment.yml
usr@sunsetc01:~$ conda activate projectname2
(projectname2) usr@sunsetc01:~$
Comparteix: