Guida dell'utente di Cloud TPU PyTorch/XLA
Esegui carichi di lavoro ML con PyTorch/XLA
Questa guida ti guida attraverso l'esecuzione di un semplice calcolo su una TPU v4 utilizzando PyTorch.
Configurazione di base
Crea una VM TPU con una TPU v4 che esegue il runtime della VM TPU per Pytorch 2.0:
gcloud compute tpus tpu-vm create your-tpu-name \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-v4-pt-2.0
Connettiti alla VM TPU tramite SSH:
gcloud compute tpus tpu-vm ssh your-tpu-name \ --zone=us-central2-b \ --accelerator-type=v4-8
Imposta la configurazione del dispositivo PJRT o XRT TPU.
PJRT
(vm)$ export PJRT_DEVICE=TPU
XRT
(vm)$ export XRT_TPU_CONFIG="localservice;0;localhost:51011"
Se esegui l'addestramento con Cloud TPU v4, imposta anche la seguente variabile di ambiente:
(vm)$ export TPU_NUM_DEVICES=4
Eseguire un semplice calcolo
Avvia l'interprete Python sulla VM TPU:
(vm)$ python3
Importa i seguenti pacchetti PyTorch:
import torch import torch_xla.core.xla_model as xm
Inserisci il seguente script:
dev = xm.xla_device() t1 = torch.randn(3,3,device=dev) t2 = torch.randn(3,3,device=dev) print(t1 + t2)
Viene visualizzato il seguente output:
tensor([[-0.2121, 1.5589, -0.6951], [-0.7886, -0.2022, 0.9242], [ 0.8555, -1.8698, 1.4333]], device='xla:1')
Esecuzione di Resnet su una TPU di un singolo dispositivo
A questo punto, puoi eseguire il codice PyTorch / XL che preferisci. Ad esempio, puoi eseguire un modello ResNet con dati falsi:
(vm)$ git clone --recursive https://github.com/pytorch/xla.git (vm)$ python3 xla/test/test_train_mp_imagenet.py --fake_data --model=resnet50 --num_epochs=1
L'esempio ResNet viene addestrato per 1 periodo e richiede circa 7 minuti. Restituisce un output simile al seguente:
Epoch 1 test end 20:57:52, Accuracy=100.00 Max Accuracy: 100.00%
Al termine dell'addestramento ResNet, elimina la VM TPU.
(vm)$ exit
$ gcloud compute tpus tpu-vm delete tpu-name \ --zone=zone
L'eliminazione può richiedere qualche minuto. Verifica che le risorse siano state eliminate eseguendo gcloud compute tpus list --zone=${ZONE}
.
Argomenti avanzati
Per i modelli con allocazioni frequenti e di grandi dimensioni, tcmalloc
migliora le prestazioni rispetto alla funzione di runtime C/C++ malloc
.
Il valore predefinito di malloc
utilizzato sulla VM TPU è tcmalloc
.
Puoi forzare il software VM VM a utilizzare lo standard malloc
annullando l'impostazione della variabile di ambiente LD_PRELOAD
:
(vm)$ unset LD_PRELOAD
Negli esempi precedenti (il semplice calcolo e ResNet50), il programma PyTorch/XLA avvia il server XRT locale nello stesso processo dell'interprete Python. Puoi anche scegliere di avviare il servizio locale XRT in un processo separato:
(vm)$ python3 -m torch_xla.core.xrt_run_server --port 51011 --restart
Il vantaggio di questo approccio è che la cache delle compilation persiste durante le esecuzioni di addestramento. Quando esegui il server XLA in un processo separato, le informazioni di logging lato server vengono scritte in /tmp/xrt_server_log
.
(vm)$ ls /tmp/xrt_server_log/
server_20210401-031010.log
Profilazione delle prestazioni delle VM TPU
Per ulteriori informazioni sulla profilazione dei modelli su VM TPU, consulta la pagina Profilazione delle prestazioni PYTorch XLA.
Esempi di pod PyTorch/XLA TPU
Vedi Pod VM PyTorch TPU per informazioni sulla configurazione ed esempi per l'esecuzione di PyTorch/XLA su un pod VM TPU.
Docker su VM VM
Questa sezione mostra come eseguire Docker su VM TPU con PyTorch/XLA preinstallato.
Immagini Docker disponibili
Puoi fare riferimento a GitHub README per trovare tutte le immagini Docker VM disponibili.
Esegui immagini Docker su VM VM
(tpuvm): sudo docker pull gcr.io/tpu-pytorch/xla:nightly_3.8_tpuvm (tpuvm): sudo docker run --privileged --shm-size 16G --name tpuvm_docker -it -d gcr.io/tpu-pytorch/xla:nightly_3.8_tpuvm (tpuvm): sudo docker exec --privileged -it tpuvm_docker /bin/bash (pytorch) root:/#
Verifica libtpu
Per verificare che libtpu sia installato, esegui:
(pytorch) root:/# ls /root/anaconda3/envs/pytorch/lib/python3.8/site-packages/ | grep libtpu
libtpu libtpu_nightly-0.1.dev20220518.dist-info
Se non viene visualizzato alcun risultato, puoi installare manualmente il file libtpu corrispondente utilizzando:
(pytorch) root:/# pip install torch_xla[tpuvm]
Verifica tcmalloc
tcmalloc
è il Malloc predefinito che utilizziamo sulla VM TPU. Per ulteriori informazioni, leggi questa sezione. Questa libreria dovrebbe essere preinstallata sulle immagini Docker VM più recenti, ma è sempre meglio verificarla manualmente. Puoi eseguire questo comando per verificare che la libreria sia installata.
(pytorch) root:/# echo $LD_PRELOAD
/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4
Se LD_PRELOAD
non è impostato, puoi eseguire manualmente:
(pytorch) root:/# sudo apt-get install -y google-perftools (pytorch) root:/# export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4"
Verifica dispositivo
Per verificare che la VM TPU sia disponibile, esegui questo comando:
(pytorch) root:/# ls /dev | grep accel
accel0 accel1 accel2 accel3
Se non vengono mostrati risultati, molto probabilmente non hai avviato il container con il flag --privileged
.
Esegui un modello
Per verificare se il dispositivo VM TPU è disponibile, esegui questo comando:
(pytorch) root:/# export XRT_TPU_CONFIG="localservice;0;localhost:51011" (pytorch) root:/# python3 pytorch/xla/test/test_train_mp_imagenet.py --fake_data --num_epochs 1