Como gerenciar versões do ambiente de execução

A AI Platform usa imagens para configurar as VMs que atendem às solicitações de predição e treinamento na nuvem. Essas imagens contêm o sistema operacional de base, além dos principais pacotes de tecnologia, pip (bibliotecas Python) e de sistema operacional. As imagens são atualizadas periodicamente para incluir melhorias e recursos novos. O controle de versões da AI Platform permite selecionar a configuração correta para trabalhar com o modelo.

Notas importantes sobre o controle de versões

  • A versão do ambiente de execução padrão do AI Platform usada pela API AI Platform Training and Prediction é a 1.0. Se uma versão não for especificada, a AI Platform usará a versão 1.0.
  • Sempre teste os modelos e jobs de treinamento completamente ao mudar para uma nova versão do ambiente de execução, independentemente de ser uma atualização grande ou pequena.

Como entender números de versão

As imagens usadas pela AI Platform correspondem à versão de ambiente de execução dela, que usa o seguinte formato:

major_version.minor_version

Versões principais e secundárias

Novas versões principais e secundárias são criadas periodicamente para incorporar um ou mais dos seguintes procedimentos:

  • Lançamentos para:
    • Sistema operacional
    • Estruturas de machine learning compatíveis
  • Alterações ou atualizações na funcionalidade do AI Platform.

As novas versões principais podem incluir alterações importantes que exigem atualizações no código escrito nas versões anteriores. As novas versões secundárias não incluem alterações importantes e são compatíveis com as variações anteriores da mesma versão principal.

Como selecionar versões de tempo de execução

Certifique-se de selecionar a versão de tempo de execução que seja compatível com as versões mais recentes de sua biblioteca de aprendizado de máquina e outros pacotes que você está usando. Se não for especificada uma versão de ambiente de execução para as tarefas abaixo, a AI Platform usará a versão padrão 1.0 para concluir a solicitação.

A versão mais antiga do ambiente de execução do AI Platform que é compatível com scikit-learn e XGBoost é a 1.4.

Consulte os detalhes de cada versão na lista de versões do AI Platform.

Especificar a versão do ambiente de execução para um job de treinamento

Defina a versão do ambiente de execução ao enviar uma solicitação de job de treinamento. Caso contrário, o AI Platform usará a versão padrão 1.0 para esse job.

gcloud

Use a sinalização --runtime-version ao executar o comando gcloud ai-platform jobs submit training.

gcloud ai-platform jobs submit training my_job \
    --module-name trainer.task \
    --job-dir gs://my/training/job/directory \
    --package-path /path/to/my/project/trainer \
    --region us-central1
    --runtime-version 1.14

Python

Configure runtimeVersion ao definir sua solicitação de job de treinamento:

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.14',
    'pythonVersion': '3.5'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

Veja mais detalhes sobre o envio de um job de treinamento na API TrainingInput.

Especificar a versão do Python para um job de treinamento

O Python 3.5 está disponível para a versão 1.4 ou superior do ambiente de execução da AI Platform. Para enviar um job de treinamento com o Python 3.5, defina a versão do Python como "3.5" e a versão do ambiente de execução como 1.4 ou superior.

Se a versão do Python não for especificada, o padrão "2.7" será usado.

gcloud

Use a sinalização --python-version para especificar a versão 3.5 do Python e configure a versão do ambiente de execução como 1.4 ou superior:

gcloud ai-platform jobs submit training my_job \
    --module-name trainer.task \
    --job-dir gs://my/training/job/directory \
    --package-path /path/to/my/project/trainer \
    --python-version 3.5
    --region us-central1 \
    --runtime-version 1.14

Python

Configure runtimeVersion como '1.4' ou superior e pythonVersion como '3.5':

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.14',
    'pythonVersion': '3.5'}

job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}

Veja mais detalhes sobre o envio de um job de treinamento na API TrainingInput.

Especificar a versão do ambiente de execução de uma versão de modelo

Especifique uma versão do ambiente de execução ao criar uma versão de modelo implantada com base em um modelo treinado. Esse processo define a versão padrão do ambiente de execução para solicitações de predição on-line e em lote. Caso não seja especificada uma versão, o AI Platform usará a versão 1.0.

gcloud

Use a sinalização --runtime-version ao executar o comando gcloud ai-platform versions create:

gcloud ai-platform versions create version_name \
    --model model_name
    --origin gs://my/trained/model/path
    --runtime-version 1.14

Python

Configure runtimeVersion ao definir o recurso Versão:

versionDef = {'name' = 'v1',
    'description' = 'The first iteration of the completely_made_up model',
    'deploymentUri' = 'gs://my/model/output/directory',
    'runtimeVersion' = '1.14'}
 

Especificar a versão do ambiente de execução para previsão em lote

Especifique a versão do ambiente de execução a ser usado quando você criar um job de predição em lote. Se você não fizer isso, o AI Platform usará a versão do ambiente de execução padrão definida na versão do modelo.

gcloud

Use a sinalização --runtime-version ao executar o comando gcloud ai-platform jobs submit prediction:

gcloud ai-platform jobs submit prediction my_batch_job_333 \
    --model my_model \
    --input-paths gs://my/cloud/storage/data/path/* \
    --output-path gs://my/cloud/storage/data/output/path
    --region us-central1 \
    --data-format text \
    --runtime-version 1.14

Python

Defina runtimeVersion em PredictionInput:

body = {
    'jobId': 'my_batch_job_333',
    'predictionInput': {
        'dataFormat': 'JSON',
        'inputPaths': ['gs://my/cloud/storage/data/path/*'],
        'outputPath': 'gs://my/cloud/storage/data/output/path',
        'region': 'us-central1',
        'modelName': 'projects/my_project/models/my_model',
        'runtimeVersion': '1.14'}}

Versões do ambiente de execução para previsão on-line

Ao criar a versão de modelo, especifique a versão de tempo de execução que queira usar para solicitações de previsão on-line. Se a versão de tempo de execução padrão da versão do modelo estiver incorreta, crie uma nova com a versão de tempo de execução correta.

Solicitações de previsão on-line sempre usam a versão de tempo de execução padrão da versão do modelo. Não é possível especificar uma versão de tempo de execução para substituir isso em uma solicitação de previsão on-line.

Como especificar pacotes de variantes (apenas treinamento)

Há três maneiras de alterar os pacotes nas instâncias de treinamento:

  • Fazer o upload manual de arquivos de pacote (tarballs) e incluir os caminhos como entrada de treinamento.
  • Especificar pacotes PyPI como dependências do pacote de treinamento.
  • Criar um contêiner personalizado que pré-instala as dependências em uma imagem.

Fornecer arquivos de pacote

Inclua outros arquivos de pacote como parte da solicitação do job de treinamento. Eles são instalados em cada instância do treinamento. O AI Platform instala todos os pacotes com pip. Não são compatíveis os pacotes projetados para outros tipos de gerenciadores.

gcloud

Use a sinalização --packages ao executar o comando gcloud ai-platform jobs submit training. Defina o valor como uma lista separada por vírgulas dos caminhos de todos os pacotes adicionais. A lista não pode conter espaços em branco entre as entradas.

gcloud ai-platform jobs submit training my_job \
    --staging-bucket gs://my-bucket \
    --package-path /path/to/my/project/trainer \
    --module-name trainer.task \
    --packages dep1.tar.gz,dep2.whl

Python

Adicione todos os outros pacotes à lista que você usa para o valor de packageUris no objeto TrainingInput.

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://my/trainer/path/package-0.0.0.tar.gz',
                    'gs://my/dependencies/path/dep1.tar.gz',
                    'gs://my/dependencies/path/dep2.whl'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'jobDir': 'gs://my/training/job/directory',
    'runtimeVersion': '1.14'}

    job_spec = {'jobId': my_job_name, 'trainingInput’: training_inputs}

Incluir dependências de pacote PyPI

É possível especificar pacotes PyPI e as respectivas versões como dependências ao pacote do treinador usando o processo normal de ferramentas de configuração:

  1. No diretório de nível superior do aplicativo treinador, inclua um arquivo setup.py.
  2. Quando você chamar setuptools.setup em setup.py, passe uma lista de dependências e, opcionalmente, as versões como o parâmetro install_requires. Neste exemplo de arquivo setup.py, mostramos o procedimento:

    from setuptools import find_packages
    from setuptools import setup
    
    REQUIRED_PACKAGES = ['some_PyPI_package>=1.5',
                         'another_package==2.6']
    
    setup(
        name='trainer',
        version='0.1',
        install_requires=REQUIRED_PACKAGES,
        packages=find_packages(),
        include_package_data=True,
        description='Generic example trainer package with dependencies.')
    

O AI Platform força a reinstalação de pacotes, para que os pacotes que fazem parte da imagem da versão do ambiente de execução possam ser substituídos por versões mais recentes ou mais antigas.

Criar um contêiner personalizado

Em vez de usar uma versão do ambiente de execução, é possível criar um contêiner do Docker para incluir as dependências. Saiba mais sobre como usar contêineres personalizados.

# Specifies base image and tag
FROM image:tag
WORKDIR /root

# Installs additional packages
RUN pip install pkg1 pkg2 pkg3

# Downloads training data
RUN curl https://example-url/path-to-data/data-filename --output /root/data-filename

# Copies the trainer code to the docker image.
COPY your-path-to/model.py /root/model.py
COPY your-path-to/task.py /root/task.py

# Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]

Como especificar versões personalizadas do TensorFlow para treinamento

Usar uma versão mais recente do TensorFlow em vez da última versão compatível do ambiente de execução no AI Platform é possível no treinamento, mas não na predição.

Para usar uma versão do TensorFlow que ainda não é compatível como uma versão completa do ambiente de execução do AI Platform, é necessário incluí-la como uma dependência personalizada do treinador. Use uma das abordagens a seguir:

  1. Especifique a versão do TensorFlow no arquivo setup.py como uma dependência PyPI. Inclua a versão na lista de pacotes obrigatórios da seguinte maneira:

     REQUIRED_PACKAGES = ['tensorflow>=1.14']
    
  2. Crie um binário do TensorFlow com base na origens. Lembre-se de seguir as instruções do TensorFlow, que é compatível apenas com CPUs. Esse processo gera um pacote pip (arquivo .whl) que pode ser incluído na solicitação do job de treinamento. Basta adicioná-lo à lista de pacotes.

Criar um binário do TensorFlow e incluí-lo como um pacote personalizado é um processo mais complexo. No entanto, você aproveita a vantagem de usar as atualizações mais recentes do TensorFlow ao treinar o modelo.

A seguir