Anexar um armazenamento em blocos durável a uma VM de TPU

Uma VM de TPU inclui um disco de inicialização de 100 GiB. Em alguns cenários, a VM de TPU pode precisar de mais armazenamento para o treinamento ou o pré-processamento. É possível adicionar um volume do Google Cloud Hyperdisk ou do Persistent Disk (PD) para expandir a capacidade do disco local.

Para ter o melhor desempenho e recursos avançados, o Google recomenda que você use o Hyperdisk, se ele estiver disponível para a TPU. Caso contrário, use o Persistent Disk. Para mais informações sobre opções de armazenamento em blocos no Compute Engine, consulte Escolher um tipo de disco.

Disponibilidade da TPU para Hyperdisk e Persistent Disk

A tabela abaixo mostra os tipos de disco disponíveis em cada versão de TPU:

Versão da TPU Tipos de disco disponíveis Número máximo de discos por VM
(inclui o disco de inicialização)
v6e Hyperdisk Balanced
Hyperdisk ML
32
v5p Balanced Persistent Disk 128
v5e Balanced Persistent Disk 128
v4 Balanced Persistent Disk 128
v3 Balanced Persistent Disk 128
v2 Balanced Persistent Disk 128

Modos de acesso

É possível configurar um disco anexado a uma TPU no modo de gravação única ou de somente leitura, conforme mostrado nesta tabela:

Modo de acesso Descrição Valor na API Compute Engine Valor na API Cloud TPU Tipos de disco disponíveis
Modo de gravação única Esse é o modo de acesso padrão. Ele permite que o disco seja anexado a, no máximo, uma instância por vez. A instância tem acesso de leitura e gravação ao disco. READ_WRITE_SINGLE read-write
  • Hyperdisk Balanced
  • Hyperdisk ML
  • Balanced Persistent Disk
Modo somente leitura Permite anexos simultâneos a várias instâncias no modo somente leitura. Nesse modo, as instâncias não podem fazer gravações no disco. Obrigatório para o compartilhamento somente leitura. READ_ONLY_MANY read-only
  • Hyperdisk Balanced
  • Balanced Persistent Disk

É possível configurar um disco anexado a uma TPU de host único, como v6e-8, v5p-8 ou v5litepod-8, no modo de gravação única ou no modo somente leitura.

Quando você anexa um disco a uma TPU de vários hosts, ele é anexado a cada VM nessa TPU. Para evitar que duas ou mais VMs de TPU façam gravações em um disco ao mesmo tempo, configure todos os discos anexados a uma TPU de vários hosts como somente leitura. Os discos somente leitura são úteis para armazenar um conjunto de dados para processamento em uma fração de TPU.

Pré-requisitos

É necessário configurar uma conta e um projeto do Google Cloud antes de seguir os procedimentos a seguir. Para mais informações, consulte Configurar o ambiente do Cloud TPU.

Criar um disco

Use o comando abaixo para criar um disco:

$ gcloud compute disks create DISK_NAME \
    --size DISK_SIZE  \
    --zone ZONE \
    --type DISK_TYPE

Descrições de flags de comando

DISK_NAME
O nome do novo disco.
DISK_SIZE
O tamanho do novo disco. O valor precisa ser um número inteiro seguido por uma unidade de tamanho: GB para gibibyte ou TB para tebibyte. Se nenhuma unidade de tamanho for especificada, GB será usado.
ZONE
O nome da zona em que o disco será criado. Ela precisa ser a mesma zona usada para criar a TPU.
DISK_TYPE
O tipo do disco. Use um dos seguintes valores: hyperdisk-balanced, hyperdisk-ml ou pd-balanced.

Para o Hyperdisk, é possível especificar a flag --access-mode com um dos seguintes valores:

  • READ_WRITE_SINGLE: acesso de leitura e gravação de uma instância. Esse é o padrão.
  • READ_ONLY_MANY (somente Hyperdisk ML): acesso somente leitura simultâneo de várias instâncias.

Para saber como criar discos, consulte Criar um volume do Hyperdisk e Criar um volume do Persistent Disk.

Anexar um disco

É possível anexar um volume de disco à VM de TPU durante a criação dela ou mais tarde.

Anexar um disco ao criar uma VM de TPU

Use a flag --data-disk para anexar um volume de disco ao criar uma VM de TPU.

Ao criar uma TPU de vários hosts, especifique mode=read-only (somente Hyperdisk ML e Balanced Persistent Disk). Ao criar uma TPU de host único, especifique mode=read-only (somente Hyperdisk ML e Balanced Persistent Disk) ou mode=read-write. Para mais informações, consulte Modos de acesso.

O exemplo abaixo mostra como anexar um volume de disco ao criar uma VM de TPU usando recursos em fila:

$ gcloud compute tpus queued-resources create QR_NAME \
    --node-id=TPU_NAME
    --project PROJECT_ID \
    --zone=ZONE \
    --accelerator-type=ACCELERATOR_TYPE \
    --runtime-version=TPU_SOFTWARE_VERSION \
    --data-disk source=projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME,mode=MODE

Descrições de flags de comando

QR_NAME
O nome da solicitação de recurso em fila.
TPU_NAME
O nome da nova TPU.
PROJECT_ID
O ID do projeto do Google Cloud em que a TPU será criada.
ZONE
O nome da zona em que o Cloud TPU será criado.
ACCELERATOR_TYPE
O tipo de acelerador especifica a versão e o tamanho do Cloud TPU que você quer criar. Para mais informações sobre os tipos de acelerador disponíveis em cada versão de TPU, consulte Versões de TPU.
TPU_SOFTWARE_VERSION
A versão do software de TPU.
DISK_NAME
O nome do disco a ser anexado à VM de TPU.
MODE
O modo do disco. Precisa ser: read-only ou read-write. Se não for especificado, o modo padrão será read-write. Para mais informações, consulte Modo de acesso.

Também é possível anexar um disco ao criar uma VM de TPU usando o comando gcloud compute tpus tpu-vm create:

$ gcloud compute tpus tpu-vm create TPU_NAME \
    --project PROJECT_ID \
    --zone=ZONE \
    --accelerator-type=ACCELERATOR_TYPE \
    --version=TPU_SOFTWARE_VERSION \
    --data-disk source=projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME,mode=MODE

Descrições de flags de comando

TPU_NAME
O nome da nova TPU.
PROJECT_ID
O ID do projeto do Google Cloud em que a TPU será criada.
ZONE
O nome da zona em que o Cloud TPU será criado.
ACCELERATOR_TYPE
O tipo de acelerador especifica a versão e o tamanho do Cloud TPU que você quer criar. Para mais informações sobre os tipos de acelerador disponíveis em cada versão de TPU, consulte Versões de TPU.
TPU_SOFTWARE_VERSION
A versão do software de TPU.
DISK_NAME
O nome do disco a ser anexado à VM de TPU.
MODE
O modo do disco. Precisa ser: read-only ou read-write. Se não for especificado, o modo padrão será read-write. Para mais informações, consulte Modos de acesso.

Anexar um disco a uma VM de TPU atual

Use o comando gcloud alpha compute tpus tpu-vm attach-disk para anexar um disco a uma VM de TPU atual.

$ gcloud alpha compute tpus tpu-vm attach-disk TPU_NAME \
    --zone=ZONE \
    --disk=DISK_NAME \
    --mode=MODE

Descrições de flags de comando

TPU_NAME
O nome da TPU.
ZONE
A zona em que o Cloud TPU está.
DISK_NAME
O nome do disco a ser anexado à VM de TPU.
MODE
O modo do disco. Precisa ser: read-only ou read-write. Se não for especificado, o modo padrão será read-write. Ele precisa corresponder ao modo de acesso do disco.

Se a VM for interrompida por algum motivo, talvez seja necessário ativar o disco depois de reiniciá-la. Para saber como ativar automaticamente o disco na reinicialização da VM, consulte Configurar a ativação automática na reinicialização do sistema.

Para saber como excluir um disco automaticamente, consulte Modificar um Hyperdisk e Modificar um Persistent Disk.

Formatar e ativar um disco

Se você anexou um disco novo e em branco à VM, antes de usá-lo, ele deve ser formatado e ativado. Se você tiver anexado um disco que já contém dados, ative-o antes de usá-lo.

Para saber como formatar e ativar um disco que não é de inicialização, consulte Formatar e ativar um disco que não é de inicialização em uma VM do Linux.

  1. Conecte-se por SSH à VM de TPU:

    $ gcloud compute tpus tpu-vm ssh TPU_NAME --zone ZONE

    Ao usar uma TPU de vários hosts, esse comando conecta você à primeira TPU na fração de TPU (também chamada de worker 0).

  2. Na VM de TPU, liste os discos anexados:

    (vm)$ sudo lsblk

    A saída do comando lsblk será parecida com esta:

    NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    loop0     7:0    0  55.5M  1 loop /snap/core18/1997
    loop1     7:1    0  67.6M  1 loop /snap/lxd/20326
    loop2     7:2    0  32.3M  1 loop /snap/snapd/11588
    loop3     7:3    0  32.1M  1 loop /snap/snapd/11841
    loop4     7:4    0  55.4M  1 loop /snap/core18/2066
    sda       8:0    0   300G  0 disk
    ├─sda1    8:1    0 299.9G  0 part /
    ├─sda14   8:14   0     4M  0 part
    └─sda15   8:15   0   106M  0 part /boot/efi
    sdb       8:16   0    10G  0 disk
    

    Neste exemplo, sda é o disco de inicialização e sdb é o nome do disco recém-anexado. O nome do disco anexado depende de quantos discos estão anexados à VM.

    Ao usar uma TPU de vários hosts, é necessário ativar o disco em todas as VMs de TPU na fração de TPU. É provável que o nome do disco seja igual em todas as VMs de TPU, mas isso não é garantido. Por exemplo, se você desanexar e anexar novamente o disco, o nome do dispositivo será incrementado, mudando de sdb para sdc.

  3. Se o disco não tiver sido formatado, faça isso usando a ferramenta mkfs. Substitua sdb se o disco tiver um nome de dispositivo diferente. Substitua ext4 se você quiser usar um sistema de arquivos diferente.

    (vm)$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
  4. Crie um diretório para ativar o disco na TPU.

    Ao usar uma TPU de host único, execute nela o comando abaixo para criar um diretório para a ativação do disco:

    (vm)$ sudo mkdir -p /mnt/disks/MOUNT_DIR

    Substitua MOUNT_DIR pelo diretório em que você quer ativar o disco.

    Ao usar uma TPU de vários hosts, execute o comando abaixo fora da VM de TPU. Esse comando cria o diretório em todas as VMs de TPU na fração de TPU.

    (vm)$ gcloud compute tpus tpu-vm ssh TPU_NAME --worker=all --command="sudo mkdir -p /mnt/disks/MOUNT_DIR"
  5. Ative o disco na TPU usando a ferramenta mount.

    Ao usar uma TPU de host único, execute o comando abaixo para ativar o disco na VM de TPU:

    (vm)$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/MOUNT_DIR

    Ao usar uma TPU de vários hosts, execute o comando abaixo fora da VM de TPU. Ele ativa o disco em todas as VMs de TPU na fração de TPU.

    (vm)$ gcloud compute tpus tpu-vm ssh TPU_NAME --worker=all --command="sudo mount -o discard,defaults /dev/sdb /mnt/disks/MOUNT_DIR"
  6. Configure permissões de leitura e gravação no disco. Por exemplo, o comando abaixo concede acesso de gravação no disco a todos os usuários.

    (vm)$ sudo chmod a+w /mnt/disks/MOUNT_DIR

Desconectar um disco

Para desconectar (desanexar) um disco da VM de TPU, execute este comando:

$ gcloud alpha compute tpus tpu-vm detach-disk TPU_NAME \
    --zone=ZONE \
    --disk=DISK_NAME

Descrições de flags de comando

TPU_NAME
O nome da TPU.
ZONE
A zona em que o Cloud TPU está.
DISK_NAME
O nome do disco a ser desanexado da VM de TPU.

Limpeza

Exclua os recursos do Cloud TPU e do Compute Engine quando terminar de usá-los.

  1. Desconecte-se do Cloud TPU, caso ainda não tenha feito isso:

    (vm)$ exit

    Agora o prompt precisa ser username@projectname, mostrando que você está no Cloud Shell.

  2. Exclua o Cloud TPU:

    $ gcloud compute tpus tpu-vm delete TPU_NAME \
        --zone=ZONE
  3. Verifique se o Cloud TPU foi excluído. A exclusão pode levar vários minutos.

    $ gcloud compute tpus tpu-vm list --zone=ZONE
  4. Verifique se o disco foi excluído automaticamente com a VM de TPU. Para isso, liste todos os discos na zona em que o disco foi criado:

    $ gcloud compute disks list --filter="zone:( ZONE )"

    Se o disco não tiver sido excluído com a VM de TPU, use este comando para excluí-lo:

    $ gcloud compute disks delete DISK_NAME \
        --zone ZONE