Habilidade personalizada de machine learning
Usar uma habilidade personalizada de aprendizado de máquina funciona da mesma forma que adicionar qualquer outra habilidade personalizada a um índice de pesquisa.
Aqui, você verá como usar a habilidade personalizada AmlSkill
é diferente e explorará as considerações de como usá-la com eficiência.
Esquema de habilidade personalizado do Azure Machine Learning
Quando você enriquece um índice de pesquisa com uma habilidade personalizada do AML (Azure Machine Learning), o enriquecimento ocorre no nível do documento. O conjunto de habilidades usado pelo indexador de documentos precisa incluir um AmlSkill
. O esquema dessa habilidade é:
{
"@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
"name": "AML name",
"description": "AML description",
"context": "/document",
"uri": "https://[Your AML endpoint]",
"key": "Your AML endpoint key",
"resourceId": null,
"region": null,
"timeout": "PT30S",
"degreeOfParallelism": 1,
"inputs": [
{
"name": "field name in the AML model",
"source": "field from the document in the index"
},
{
"name": "field name in the AML model",
"source": "field from the document in the index"
},
],
"outputs": [
{
"name": "result field from the AML model",
"targetName": "result field in the document"
}
]
}
Importante
O URI precisa usar um ponto de extremidade HTTPS. Pode ser um endereço de URL personalizado gerenciado fornecido pela Microsoft ou seu nome de domínio e certificado.
Observe que a habilidade personalizada não inclui configurações para batchSize
, pois o modelo AML processará um único documento por vez. As configurações restantes que controlam o desempenho da habilidade são timeout
e degreeOfParallelism
. O esquema acima definiu 30 segundos como o valor do tempo limite. O grau de paralelismo deve começar em um. Dependendo da infraestrutura, você poderá aumentar esse número.
A melhor maneira de gerenciar a eficiência de uma habilidade do AML é escalar verticalmente o cluster de inferência do Kubernetes adequadamente para gerenciar sua carga de trabalho.
O índice do documento precisa de um campo para armazenar os resultados do modelo do AML. Em seguida, você adicionará um mapeamento de campo de saída para armazenar os resultados do conjunto de habilidades personalizado para o campo no documento no índice.
O JSON para fazer esse mapeamento de campos de saída é:
"outputFieldMappings": [
{
"sourceFieldName": "/result field in the document",
"targetFieldName": "result field from the AML model"
}
]
Crie seu modelo do Azure Machine Learning usando ferramentas de desenvolvedor como o SDK do Python, as APIs REST ou a CLI do Azure. Outra opção é aproveitar o Azure AI Machine Learning Studio, uma interface gráfica do usuário que permite criar, treinar e implantar modelos sem nenhuma codificação.
Com um modelo criado, você altera a forma como o código de pontuação chama o modelo, a fim de permitir que ele seja usado pela habilidade de pesquisa personalizada.
As últimas etapas são criar um cluster do Kubernetes para hospedar um ponto de extremidade para seu modelo.
Criar um workspace do AML
Ao criar o espaço de trabalho do AML, o Azure também criará contas de armazenamento, um repositório de chaves e recursos de insights do aplicativo. O painel Visão geral do espaço de trabalho do AML fornece um link para iniciar o Azure AI Machine Learning Studio.
Criar e treinar um modelo no estúdio do Azure Machine Learning
O Azure AI Machine Learning Studio permite que você use um designer para usar o recurso arrastar e soltar a fim de criar pipelines que criam e treinam modelos. Há uma forma ainda mais fácil de criar modelos usando modelos predefinidos.
Não importa como você escolhe criar seus modelos, eles precisam ser registrados no Azure AI Machine Learning Studio para que você possa implantar o modelo em um serviço Web.
Alterar o funcionamento do modelo para permitir que ele seja chamado pela habilidade personalizada do AML
Os modelos que você treina normalmente usarão muitos exemplos dos dados. Os conjuntos de dados terão muitas linhas e serão divididos e usados para treinar e testar o modelo. O código que processa esses dados e os transmite para o modelo precisa ser alterado para lidar com linhas simples.
A resposta JSON do modelo também deve conter apenas a previsão de saída.
Por exemplo, se os dados forem uma matriz de objetos JSON:
[
{
"attribute-1": null,
"attribute-2": null
},
{
"attribute-1": null,
"attribute-2": null
},
{
"attribute-1": null,
"attribute-2": null
}
]
O código de pontuação do Python precisará processar os dados de uma linha por vez:
data = json.loads(data)
for row in data:
for key, val in row.items():
input_entry[key].append(decode_nan(val))
Para alterar o conjunto de dados de entrada para um só registro:
{
"attribute-1": null,
"attribute-2": null
}
O código Python precisará ser alterado para:
data = json.loads(data)
for key, val in data.items():
input_entry[key].append(decode_nan(val))
Para a resposta do código de pontuação, o código padrão retorna todo o documento JSON:
return json.dumps({"result": result.data_frame.values.tolist()})
A habilidade personalizada precisa conseguir mapear uma só resposta do modelo. Portanto, o código deve retornar um JSON que seja apenas o último atributo.
output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
"predicted_outcome": output[0][-1]
}
Criar um ponto de extremidade para uso pelo modelo
O modelo é implantado em um ponto de extremidade. O Azure AI Machine Learning Studio dá suporte à implantação de um modelo em um ponto de extremidade em tempo real, um ponto de extremidade em lote ou um serviço Web. No momento, a habilidade AmlSkill
personalizada na Pesquisa de IA do Azure só dá suporte a pontos de extremidades de serviço da Web.
A outra restrição é que o ponto de extremidade precisa ser um cluster do AKS (Serviço de Kubernetes do Azure). Não há suporte para instâncias de contêiner.
Se você tiver experiência em criar e gerenciar clusters do AKS, crie manualmente os clusters no portal do Azure e referencie-os quando criar o ponto de extremidade. No entanto, uma opção mais fácil é permitir que o Azure AI Machine Learning Studio crie e gerencie o cluster para você.
Se você procurar a seção de computação do estúdio, poderá criar clusters de inferência. Em seguida, o estúdio do AML orientará você na escolha do tamanho do cluster e até habilitará o HTTPS e criará um nome de domínio. Ela estará no formato location.cloudapp.azure.com:443
.
Conectar a habilidade personalizada do AML ao ponto de extremidade
Com tudo isso pronto, você precisa atualizar seu serviço Pesquisa de IA do Azure. As etapas para fazer isso são semelhantes aos exemplos mostrados neste módulo, portanto, não detalharemos os detalhes aqui, mas listaremos as etapas a seguir.
- Primeiro, para enriquecer o índice de pesquisa, você adicionará um novo campo ao índice para incluir a saída do modelo.
- Em seguida, você atualizará o conjunto de habilidades do índice e adicionará a habilidade personalizada
#Microsoft.Skills.Custom.AmlSkill
. - Em seguida, você vai alterar o indexador para mapear a saída da habilidade personalizada para o campo criado no índice.
- A última etapa será executar novamente o indexador para enriquecer o índice com o modelo do AML.