Preparar Modelo PyTorch

Este artigo descreve como utilizar o componente Train PyTorch Model no estruturador do Azure Machine Learning para preparar modelos PyTorch como o DenseNet. A preparação ocorre depois de definir um modelo e definir os respetivos parâmetros e requer dados etiquetados.

Atualmente, o componente Train PyTorch Model suporta tanto o nó único como a preparação distribuída.

Como utilizar o Modelo Train PyTorch

  1. Adicione o componente DenseNet ou a ResNet ao seu rascunho de pipeline no estruturador.

  2. Adicione o componente Train PyTorch Model ao pipeline. Pode encontrar este componente na categoria Preparação de Modelos . Expanda Preparar e, em seguida, arraste o componente Train PyTorch Model para o pipeline.

    Nota

    Preparar o componente do Modelo PyTorch é melhor executado na computação do tipo GPU para um conjunto de dados grande, caso contrário, o pipeline falhará. Pode selecionar computação para um componente específico no painel direito do componente ao definir Utilizar outro destino de computação.

  3. Na entrada esquerda, anexe um modelo não preparado. Anexe o conjunto de dados de preparação e o conjunto de dados de validação à entrada média e direita do Modelo Train PyTorch.

    Para um modelo não preparado, tem de ser um modelo PyTorch como o DenseNet; caso contrário, será emitido um "InvalidModelDirectoryError".

    Para o conjunto de dados, o conjunto de dados de preparação tem de ser um diretório de imagem etiquetado. Veja Converter para o Diretório de Imagens para saber como obter um diretório de imagem etiquetado. Se não estiver etiquetado, será emitido um "NotLabeledDatasetError".

    O conjunto de dados de preparação e o conjunto de dados de validação têm as mesmas categorias de etiqueta, caso contrário, será emitido um InvalidDatasetError.

  4. Para Épocas, especifique quantas épocas gostaria de preparar. Todo o conjunto de dados será iterado em cada época, por predefinição 5.

  5. Para o tamanho do Batch, especifique quantas instâncias preparar num lote, por predefinição, 16.

  6. Para o número do passo de aquecimento, especifique quantas épocas gostaria de aquecer a preparação, caso a taxa de aprendizagem inicial seja ligeiramente grande demais para começar a convergir, por predefinição 0.

  7. Para Taxa de aprendizagem, especifique um valor para a taxa de aprendizagem e o valor predefinido é 0,001. A taxa de aprendizagem controla o tamanho do passo utilizado no otimizador como o sgd sempre que o modelo é testado e corrigido.

    Ao definir a taxa mais pequena, testa o modelo com mais frequência, com o risco de ficar preso num planalto local. Ao definir a taxa maior, pode convergir mais rapidamente, com o risco de ultrapassar o verdadeiro minima.

    Nota

    Se a perda do comboio se tornar nan durante a preparação, o que pode ser causado por uma taxa de aprendizagem demasiado grande, a diminuição da taxa de aprendizagem pode ajudar. Na preparação distribuída, para manter a descida de gradação estável, a taxa de aprendizagem real é calculada porque lr * torch.distributed.get_world_size() o tamanho do lote do grupo de processos é o tamanho do mundo vezes superior ao do processo único. A degradação da taxa de aprendizagem polinomial é aplicada e pode ajudar a resultar num modelo de melhor desempenho.

  8. Para Sementes aleatórias, escreva opcionalmente um valor inteiro para utilizar como semente. A utilização de uma semente é recomendada se quiser garantir a reprodutibilidade da experimentação em todas as tarefas.

  9. Para Paciência, especifique a quantidade de épocas para parar a preparação antecipada se a perda de validação não diminuir consecutivamente. por predefinição 3.

  10. Para Frequência de impressão, especifique a frequência de impressão do registo de preparação sobre iterações em cada época, por predefinição 10.

  11. Submeta o pipeline. Se o conjunto de dados tiver um tamanho maior, demorará algum tempo e a computação de GPU será recomendada.

Preparação distribuída

Na preparação distribuída, a carga de trabalho para preparar um modelo é dividida e partilhada entre vários mini processadores, denominados nós de trabalho. Estes nós de trabalho funcionam em paralelo para acelerar a preparação de modelos. Atualmente, o estruturador suporta a preparação distribuída para o componente Train PyTorch Model .

Tempo de preparação

A preparação distribuída permite preparar um conjunto de dados grande como ImageNet (1000 classes, 1,2 milhões de imagens) em apenas várias horas por Train PyTorch Model. A tabela seguinte mostra o tempo de preparação e o desempenho durante a preparação de 50 épocas do Resnet50 na ImageNet de raiz com base em diferentes dispositivos.

Dispositivos Tempo de Preparação Débito de Preparação Precisão de Validação top-1 Precisão de Validação top-5
16 GPUs V100 6h22min ~3200 Imagens/Seg 68.83% 88.84%
8 GPUs V100 12h21min ~1670 Imagens/Seg 68.84% 88.74%

Clique neste separador "Métricas" deste componente e veja gráficos de métricas de preparação, como "Preparar imagens por segundo" e "Precisão 1 superior".

Captura de ecrã a mostrar as métricas de preparação

Como ativar a preparação distribuída

Para ativar a preparação distribuída para preparar o componente do Modelo PyTorch , pode definir as definições da tarefa no painel direito do componente. Apenas o cluster de Computação AML é suportado para preparação distribuída.

Nota

São necessárias várias GPUs para ativar a preparação distribuída porque o componente Modelo PyTorch de Preparação de Back-end NCCL utiliza cuda de necessidades.

  1. Selecione o componente e abra o painel direito. Expanda a secção Definições da tarefa.

    Captura de ecrã a mostrar como definir a preparação distribuída no runsetting

  2. Certifique-se de que selecionou computação AML para o destino de computação.

  3. Na secção Esquema de recursos, tem de definir os seguintes valores:

    • Contagem de nós : número de nós no destino de computação utilizado para preparação. Deve ser menor ou igual aoNúmero máximo de nós do cluster de computação. Por predefinição, é 1, o que significa uma tarefa de nó único.

    • Contagem de processos por nó: número de processos acionados por nó. Deve ser menor ou igual àUnidade de Processamento da sua computação. Por predefinição, é 1, o que significa uma tarefa de processo único.

    Pode verificar o número máximo de nós e Unidade de Processamento da sua computação ao clicar no nome da computação na página de detalhes de computação.

    Captura de ecrã a mostrar como verificar o cluster de computação

Pode saber mais sobre a formação distribuída no Azure Machine Learning aqui.

Resolução de problemas de preparação distribuída

Se ativar a preparação distribuída para este componente, haverá registos de controladores para cada processo. 70_driver_log_0 é para o processo principal. Pode verificar os registos de controladores para obter detalhes de erro de cada processo no separador Saídas+registos no painel direito.

Captura de ecrã a mostrar o registo do controlador

Se a preparação distribuída ativada pelo componente falhar sem quaisquer 70_driver registos, pode verificar se existem 70_mpi_log detalhes do erro.

O exemplo seguinte mostra um erro comum, que é a Contagem de processos por nó maior do que a Unidade de Processamento da computação.

Captura de ecrã a mostrar o registo mpi

Pode consultar este artigo para obter mais detalhes sobre a resolução de problemas de componentes.

Resultados

Após a conclusão da tarefa de pipeline, para utilizar o modelo para classificação, ligue o Modelo De Preparação do PyTorch ao Modelo de Imagem de Classificação, para prever valores para novos exemplos de entrada.

Notas técnicas

Entradas esperadas

Nome Tipo Descrição
Modelo não preparado UntrainedModelDirectory Modelo não preparado, exigir PyTorch
Conjunto de dados de preparação ImageDirectory Conjunto de dados de preparação
Conjunto de dados de validação ImageDirectory Conjunto de dados de validação para avaliação a cada época

Parâmetros do componente

Nome Intervalo Tipo Predefinição Description
Épocas >0 Número inteiro 5 Selecione a coluna que contém a etiqueta ou a coluna de resultados
Tamanho do lote >0 Número inteiro 16 Quantas instâncias preparar num lote
Número do passo de aquecimento >=0 Número inteiro 0 Quantas épocas para aquecer o treino
Taxa de aprendizagem >=duplo. Epsilon Float 0.1 A taxa de aprendizagem inicial do otimizador de Gradação de Gradação Estocástico.
Semente aleatória Qualquer Número inteiro 1 A semente do gerador de números aleatórios utilizado pelo modelo.
Paciência >0 Número inteiro 3 Quantas épocas para parar o treino precoce
Frequência de impressão >0 Número inteiro 10 Frequência de impressão do registo de preparação sobre iterações em cada época

Saídas

Nome Tipo Description
Modelo preparado ModelDirectory Modelo preparado

Passos seguintes

Veja o conjunto de componentes disponíveis para o Azure Machine Learning.