Anexar armazenamento de bloco 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 da TPU pode precisar de armazenamento adicional para treinamento ou pré-processamento. É possível adicionar um volume do Hyperdisk do Google Cloud ou do Persistent Disk para expandir a capacidade do disco local.

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

Suporte a TPU para Hyperdisk e Persistent Disk

A tabela a seguir mostra os tipos de disco compatíveis com cada versão de TPU:

Versão da TPU Tipos de disco compatíveis
v6e Hiperdisco equilibrado
Hiperdisco ML
v5p Disco permanente equilibrado
v5e Disco permanente equilibrado
v4 Disco permanente equilibrado
v3 Disco permanente equilibrado
v2 Disco permanente equilibrado

Meios de acesso

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

Modo de acesso Descrição Valor na API Compute Engine Valor na API Cloud TPU Tipos de disco compatíveis
Modo de gravador único Esse é o modo de acesso padrão. 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
  • Hiperdisco equilibrado
  • Hyperdisk ML
  • Disco permanente equilibrado
Modo somente leitura Permite anexos simultâneos a várias instâncias no modo somente leitura. As instâncias não podem gravar no disco nesse modo. Obrigatório para compartilhamento somente leitura. READ_ONLY_MANY read-only
  • Hiperdisco equilibrado
  • Disco permanente equilibrado

É possível configurar um disco anexado a uma TPU de host único (por exemplo, v6e-8, v5p-8 ou v5litepod-8) no modo de gravação única ou 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 gravem 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 fatia de TPU.

Pré-requisitos

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

Criar um disco

Use o comando a seguir para criar um disco:

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

Descrições de sinalizações 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 de 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 novo disco será criado. Ela precisa ser a mesma zona usada para criar a TPU.
DISK_TYPE
O tipo de disco. Use um dos seguintes valores: hyperdisk-balanced, hyperdisk-ml ou pd-balanced.

Para o Hyperdisk, você pode 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 simultâneo somente leitura de várias instâncias.

Para mais informações sobre a criação de discos, consulte Criar um novo volume do Hyperdisk e Criar um novo Persistent Disk permanente.

Anexar um disco

É possível anexar um volume de disco à VM de TPU ao criar a VM de TPU ou depois que ela for criada.

Anexar um disco ao criar uma VM de TPU

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

Se você estiver criando uma TPU com vários hosts, especifique mode=read-only ( somente Hyperdisk ML e disco persistente balanceado). Se você estiver criando uma TPU de host único, especifique mode=read-only ( Hyperdisk ML e disco persistente equilibrado apenas) ou mode=read-write. Para mais informações, consulte Modos de acesso.

O exemplo a seguir 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 sinalizações 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 Google Cloud em que a TPU será criada.
ZONE
O nome da zona em que a Cloud TPU será criada.
ACCELERATOR_TYPE
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores aceitos para cada versão de TPU, consulte Versões de TPU.
TPU_SOFTWARE_VERSION
A versão do software da TPU.
DISK_NAME
O nome do disco a ser anexado à VM de TPU.
MODE
O modo do disco. O modo 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 sinalizações de comando

TPU_NAME
O nome da nova TPU.
PROJECT_ID
O ID do projeto Google Cloud em que a TPU será criada.
ZONE
O nome da zona em que a Cloud TPU será criada.
ACCELERATOR_TYPE
O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores aceitos para cada versão de TPU, consulte Versões de TPU.
TPU_SOFTWARE_VERSION
A versão do software da TPU.
DISK_NAME
O nome do disco a ser anexado à VM de TPU.
MODE
O modo do disco. O modo 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

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

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

Descrições de sinalizações de comando

TPU_NAME
O nome da TPU.
ZONE
A zona em que o Cloud TPU está localizado.
DISK_NAME
O nome do disco a ser anexado à VM de TPU.
MODE
O modo do disco. O modo 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 desligada por algum motivo, talvez seja necessário montar o disco depois de reiniciar a VM. Para saber como ativar a montagem automática do disco na reinicialização da VM, consulte Configurar a montagem automática na reinicialização do sistema.

Para mais informações sobre como excluir um disco automaticamente, consulte Modificar um Hyperdisk e Modificar um disco permanente.

Formatar e montar um disco

Se você anexou um disco novo e em branco à VM do TPU, antes de poder usá-lo, formate e ative o disco. Se você anexou um disco que já contém dados, ative-o antes de usá-lo.

Para mais informações sobre como formatar e montar 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 à VM do TPU usando SSH:

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

    Se você estiver usando uma TPU de vários hosts, esse comando vai conectar você à primeira TPU na fração da TPU (também chamada de worker 0).

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

    (vm)$ sudo lsblk

    A saída do comando lsblk é semelhante a 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 montar o disco em todas as VMs da TPU na fração da TPU. O nome do disco precisa ser o mesmo para todas as VMs TPU, mas isso não é garantido. Por exemplo, se você desconectar e reconectar o disco, o nome do dispositivo será incrementado, mudando de sdb para sdc.

  3. Se o disco não tiver sido formatado, formate o disco conectado 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 montar o disco na TPU.

    Se você estiver usando uma TPU de host único, execute o comando a seguir na TPU para criar um diretório para montar o disco:

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

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

    Se você estiver usando uma TPU de vários hosts, execute o comando abaixo fora da VM da TPU. Esse comando vai criar 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. Monte o disco no TPU usando a ferramenta mount.

    Se você estiver usando uma TPU de host único, execute o comando a seguir para montar o disco na VM da TPU:

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

    Se você estiver usando uma TPU de vários hosts, execute o comando abaixo fora da VM da TPU. Ele vai montar 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 as permissões de leitura e gravação no disco. Por exemplo, o comando a seguir concede acesso de gravação no dispositivo a todos os usuários.

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

Desmontar um disco

Para desconectar um disco da VM do TPU, execute o seguinte comando:

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

Descrições de sinalizações de comando

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

Limpar

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 quando a VM de TPU foi excluída, listando 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 quando a VM de TPU foi excluída, use o seguinte comando para excluí-lo:

    $ gcloud compute disks delete DISK_NAME \
        --zone ZONE