Pular para o conteúdo principal

Coloque cargas de trabalho de treinamento em produção

info

Visualização

Esse recurso está em Prévia Pública.

Use DABs para definir uma carga de trabalho de treinamento do AI Runtime como código. Mantenha-o no controle de código-fonte, implante-o em vários ambientes, programe-o e crie-o em conjunto com outras tarefas. Esta página aborda o caminho traga seu próprio treinamento (bring-your-own-training), em que um ai_runtime_task executa seu próprio comando em um diretório de código em compute de GPU Serverless.

dica

Principais conclusões

  • Use Pacotes de Automação Declarativa para definir cargas de trabalho de treinamento como código, implantá-las em vários ambientes e programá-las.
  • O ai_runtime_task executa seu próprio comando em um diretório de código (treinamento bring-your-own-training).
  • Combine tarefas de GPU e CPU em jobs de multitarefa.

Esta é uma tarefa diferente de executar um notebook em GPU serverless por meio de um bundle. Para obter mais informações sobre o exemplo básico de bundle de notebook em GPU, consulte Agendar com a Jobs API e os Pacotes de Automação Declarativa.

Requisitos​

  • Um workspace com o AI Runtime habilitado. Consulte Requisitos.
  • A CLI do Databricks (interface de linha de comando) instalada e configurada para implantar pacotes.

Definir uma tarefa do AI Runtime em um pacote​

Um ai_runtime_task nomeia um experimento, aponta para o seu código de treinamento com code_source_path e declara uma implantação: o comando a ser executado e a GPU em que será executado. Adicione-o a um job no seu pacote:

YAML
resources:
jobs:
train:
tasks:
- task_key: train
ai_runtime_task:
experiment: my-experiment
code_source_path: ./dist/code.tgz
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1

code_source_path aponta para o seu código de treinamento empacotado, e command_path é o script que a tarefa executa. Novas tentativas, tempos limite e permissões são definidos na tarefa e no job da mesma forma que qualquer job do Databricks, para que suas práticas de pacote existentes sejam mantidas. Para saber como empacotar e referenciar seu código, consulte Enviar seu código de treinamento.

ai_runtime_task campos​

campo

Tipo

Descrição

experiment

String

Obrigatório. O nome da experiência do MLflow para a execução. Consulte Acompanhamento de experimentos e observabilidade.

code_source_path

String

O código de {treinamento} para execução: o arquivo de saída de um artefato tgz pacote, ou um caminho /Workspace ou /Volumes para o código que já foi feito upload. Consulte Enviar seu código de treinamento.

deployments

Sequência

Obrigatório. Uma única implantação que descreve o comando e o compute para executá-lo. Cada entrada contém command_path, compute e um name opcional.

deployments[].command_path

String

Obrigatório. O script no qual a tarefa é executada em cada nó.

deployments[].compute.accelerator_type

String

Obrigatório. O tipo de GPU, por exemplo GPU_1xA10, GPU_1xH100, GPU_8xH100 ou GPU_8xB300.

deployments[].compute.accelerator_count

Integer

Obrigatório. O número total de GPUs em todos os nós — um múltiplo da contagem por nó codificada em accelerator_type.

deployments[].name

String

Um nome opcional para a implantação, usado nos logs e na IU.

docker_image_url

String

Uma imagem personalizada opcional do Docker Image para execução o comando, em vez do ambiente gerenciado. Consulte Usar imagens personalizadas do Docker com a CLI antiga do Python.

mlflow_run

String

Um nome de exibição opcional para a execução do MLflow.

mlflow_experiment_directory

String

Um diretório do workspace opcional sob o qual o experimento é criado. Deve começar com /Workspace. Defina isto ao executar como um Service Principal que não tem um diretório de usuário default.

mlflow_artifact_location

String

Um local raiz opcional para artefatos do MLflow, por exemplo, um caminho /Volumes/<catalog>/<schema>/<volume>/…. Deve corresponder ao local de artefatos de um experimento existente ou ser omitido.

campo

Tipo

Descrição

experiment

String

Obrigatório. O nome da experiência do MLflow para a execução. Consulte Acompanhamento de experimentos e observabilidade.

code_source_path

String

O código de {treinamento} para execução: o arquivo de saída de um artefato tgz pacote, ou um caminho /Workspace ou /Volumes para o código que já foi feito upload. Consulte Enviar seu código de treinamento.

deployments

Sequência

Obrigatório. Uma única implantação que descreve o comando e o compute para executá-lo. Cada entrada contém command_path, compute e um name opcional.

deployments[].command_path

String

Obrigatório. O script no qual a tarefa é executada em cada nó.

deployments[].compute.accelerator_type

String

Obrigatório. O tipo de GPU, por exemplo GPU_1xA10, GPU_1xH100, GPU_8xH100 ou GPU_8xB300.

deployments[].compute.accelerator_count

Integer

Obrigatório. O número total de GPUs em todos os nós — um múltiplo da contagem por nó codificada em accelerator_type.

deployments[].name

String

Um nome opcional para a implantação, usado nos logs e na IU.

docker_image_url

String

Uma imagem personalizada opcional do Docker Image para execução o comando, em vez do ambiente gerenciado. Consulte Usar imagens personalizadas do Docker com a CLI antiga do Python.

mlflow_run

String

Um nome de exibição opcional para a execução do MLflow.

mlflow_experiment_directory

String

Um diretório do workspace opcional sob o qual o experimento é criado. Deve começar com /Workspace. Defina isto ao executar como um Service Principal que não tem um diretório de usuário default.

mlflow_artifact_location

String

Um local raiz opcional para artefatos do MLflow, por exemplo, um caminho /Volumes/<catalog>/<schema>/<volume>/…. Deve corresponder ao local de artefatos de um experimento existente ou ser omitido.

Defina novas tentativas, limites de tempo, permissões e o ambiente (environment_key) na tarefa e no job — e não dentro de ai_runtime_task. Para obter a referência completa da tarefa, consulte AI Runtime task.

Configure o acelerador de hardware​

Defina accelerator_type como a GPU necessária para a sua carga de trabalho e accelerator_count como o número total de GPUs. A contagem é um múltiplo do número de GPUs por nó: 1 para GPU_1xA10 e GPU_1xH100, e 8 para GPU_8xH100 e GPU_8xB300. Uma contagem maior do que o tamanho por nó executa a tarefa em vários nós — por exemplo, GPU_8xH100 com accelerator_count: 16 é executado em dois nós. Para obter orientação sobre como escolher um acelerador, consulte Opções de hardware.

nota

Para execuções com vários nós, o AI Runtime executa seu comando em cada nó e preenche as variáveis de ambiente de treinamento distribuído padrão no ambiente da tarefa —NUM_NODES, WORLD_SIZE, LOCAL_WORLD_SIZE, MASTER_ADDR e MASTER_PORT. Faça a leitura deles a partir do seu comando (por exemplo, uma inicialização de torchrun); eles não são definidos no pacote.

Definir o ambiente e as dependências​

Declare um bloco environments no job e faça referência a ele a partir da tarefa com environment_key. O AI Runtime instala as dependências listadas antes de o comando ser executado:

YAML
resources:
jobs:
train:
tasks:
- task_key: train
environment_key: default
ai_runtime_task:
# experiment, code_source_path, and deployments as above
environments:
- environment_key: default
spec:
environment_version: '6'
dependencies:
- numpy

Para os ambientes disponíveis, consulte Configure o seu ambiente.

Envie o seu código de treinamento​

code_source_path informa à tarefa onde o seu código de treinamento está. Ele assume uma de duas formas:

  • Um artefato tgz de pacote — declare um artefato e aponte code_source_path para o arquivo de saída dele. O Databricks cria o tarball e faz o upload dele no databricks bundle deploy. É assim que você envia código de um diretório de projeto local ou de uma revisão do Git confirmada.
  • Um caminho de Workspace ou volume — código que já teve o upload, usado no estado em que se encontra.

Declare um artefato tgz e aponte code_source_path para o arquivo de saída dele. Em databricks bundle deploy, a CLI cria o tarball, faz o upload dele, e a tarefa o extrai e executa o seu comando nele:

YAML
artifacts:
code:
type: tgz
path: .
include: [src]
files:
- source: ./dist/code.tgz
resources:
jobs:
train:
tasks:
- task_key: train
ai_runtime_task:
code_source_path: ./dist/code.tgz

Use include para empacotar arquivos da sua árvore de trabalho, ou git para criar um snapshot de uma branch confirmada ou de um commit.

Os campos do artefato tgz:

campo

Descrição

type

tgz cria um arquivo compactado tarball gzip a partir dos arquivos de origem, em vez de executar um comando build.

path

O diretório base para empacotar. Os caminhos de include e os nomes de entrada do arquivo compactado são relativos a ele.

include

Uma lista de subcaminhos de path para empacotar. Omitir para empacotar tudo de path. Considera .gitignore; o sync.include e o sync.exclude em todo o pacote não se aplicam. Alternativa a um comando build.

git

Tire um Snapshot de uma referência Git confirmada em vez da árvore de trabalho. Defina git.branch ou git.commit (commit prevalece quando ambos estão definidos). Alternativa a um comando build.

files[].source

O caminho do tarball compilado. Aponte code_source_path para isto.

campo

Descrição

type

tgz cria um arquivo compactado tarball gzip a partir dos arquivos de origem, em vez de executar um comando build.

path

O diretório base para empacotar. Os caminhos de include e os nomes de entrada do arquivo compactado são relativos a ele.

include

Uma lista de subcaminhos de path para empacotar. Omitir para empacotar tudo de path. Considera .gitignore; o sync.include e o sync.exclude em todo o pacote não se aplicam. Alternativa a um comando build.

git

Tire um Snapshot de uma referência Git confirmada em vez da árvore de trabalho. Defina git.branch ou git.commit (commit prevalece quando ambos estão definidos). Alternativa a um comando build.

files[].source

O caminho do tarball compilado. Aponte code_source_path para isto.

nota

O AI Runtime extrai seu código para um diretório e o expõe como a variável de ambiente CODE_SOURCE_PATH. Faça referência a ele a partir do seu comando para que os caminhos relativos sejam resolvidos, por exemplo, cd "$CODE_SOURCE_PATH" antes de executar seu script.

Exemplo completo​

Este exemplo ensina em uma única GPU A10 a partir de um projeto local, sem nenhuma configuração prévia da CLI além de instalar e configurar a CLI do Databricks. O projeto tem três arquivos:

Text
my-training/
├── databricks.yml
├── command.sh
└── src/
└── train.py

command.sh é o ponto de entrada nomeado por command_path. Ele muda para o diretório de código extraído e executa o script de treinamento:

Bash
#!/usr/bin/env bash
set -euo pipefail
cd "$CODE_SOURCE_PATH"
python train.py

databricks.yml nomeia o pacote, empacota src/ como um artefato tgz, executa-o como um ai_runtime_task, instala numpy no ambiente de tarefas e define destinos de desenvolvimento e produção:

YAML
bundle:
name: my-training

artifacts:
code:
type: tgz
path: .
include: [src]
files:
- source: ./dist/code.tgz

resources:
jobs:
train:
name: my-training
tasks:
- task_key: train
environment_key: default
ai_runtime_task:
experiment: /Users/me@example.com/my-training
code_source_path: ./dist/code.tgz
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1
environments:
- environment_key: default
spec:
environment_version: '6'
dependencies:
- numpy

targets:
dev:
mode: development
default: true
prod:
mode: production

Implante o pacote e execute o job. databricks bundle deploy cria e faz upload do artefato tgz e cria o job; databricks bundle run o inicia:

Bash
databricks bundle deploy --target dev
databricks bundle run train --target dev

Criar fluxos de trabalho multitarefa​

Um ai_runtime_task é uma tarefa de job do Databricks, portanto, ele é composto com o restante de um job. Você pode executar uma etapa de preparação antes do treinamento, combinar tarefas de GPU e CPU em um único job e usar diferentes aceleradores por tarefa.

Ordene tarefas com depends_on​

Use depends_on para executar tarefas em sequência. O pipeline a seguir executa um notebook de preparação e, em seguida, uma tarefa de treinamento em GPU que é iniciada somente após a conclusão bem-sucedida da tarefa de preparação:

YAML
resources:
jobs:
train_pipeline:
tasks:
- task_key: prep
notebook_task:
notebook_path: ./prep.py
- task_key: train
depends_on:
- task_key: prep
ai_runtime_task:
experiment: my-experiment
code_source_path: ./dist/code.tgz
deployments:
- command_path: ./command.sh
compute:
accelerator_type: GPU_1xA10
accelerator_count: 1

Combinar tarefas de GPU e CPU​

No pipeline acima, apenas o passo de treinamento precisa de uma GPU. Manter o trabalho que não usa GPU, como a preparação de dados, em tarefas separadas faz com que o tempo da GPU permaneça focado no treinamento.

nota

Um ai_runtime_task não oferece suporte a valores de tarefa de job do Databricks ({{tasks.<task_key>.values.<name>}} ou dbutils.jobs.taskValues). Para passar dados entre os passos, grave-os em um local compartilhado que ambas as tarefas possam ler, como um volume do Unity Catalog ou um arquivo do workspace, e faça referência a esse caminho a partir de cada tarefa.

Programar a carga de trabalho​

Adicione um schedule ao job para executá-lo em uma cadência. Envie a programação pausada para que a implantação do pacote não comece execuções por conta própria, depois retome-a quando estiver pronto:

YAML
resources:
jobs:
train_pipeline:
schedule:
quartz_cron_expression: '0 0 9 * * ?'
timezone_id: UTC
pause_status: PAUSED

Promover de desenvolvimento para produção​

A promoção de desenvolvimento para produção é um recurso padrão de pacote que a tarefa de AI Runtime herda sem alterações.

Destinos e modos de pacote​

Defina um destino de produção com mode: production junto com seu destino de desenvolvimento. O destino controla onde o pacote é implantado e como seus recursos são nomeados:

YAML
targets:
dev:
mode: development
default: true
prod:
mode: production

Implantar e executar​

Implante e execute o pacote em um destino com os comandos de pacote padrão:

Bash
databricks bundle deploy --target dev
databricks bundle run train_pipeline --target dev

Passos seguintes​