Compartilhar via


Implante modelos do Hugging Face Hub em pontos de extremidade on-line do Azure Machine Learning para inferência em tempo real

A Microsoft fez uma parceria com o Hugging Face para trazer modelos de código aberto no Hub do Hugging Face para o Azure Machine Learning. O Hugging Face é a criadora da Transformers, uma biblioteca muito popular para a criação de grandes modelos de linguagem. O hub de modelos do Hugging Face, que tem milhares de modelos de código aberto. A integração com o Azure Machine Learning permite que você implante modelos de código aberto de sua escolha em uma infraestrutura de inferência segura e escalonável no Azure. Você pode pesquisar entre milhares de modelos de transformadores no catálogo de modelos do Azure Machine Learning e implantar modelos no ponto de extremidade online gerenciado com facilidade por meio do assistente guiado. Uma vez implantado, o ponto de extremidade online gerenciado oferece uma API REST segura para pontuar seu modelo em tempo real.

Observação

Os modelos da Hugging Face estão sujeitos a termos de licença de terceiros disponíveis na página de detalhes de modelos dessa empresa. É sua responsabilidade cumprir os termos de licença do modelo.

Benefícios do uso de pontos de extremidade online para inferência em tempo real

Os pontos de extremidade online gerenciados no Azure Machine Learning ajudam você a implantar modelos em computadores com CPU e GPU avançados no Azure de maneira pronta para uso. Os pontos de extremidade online gerenciados cuidam do serviço, do da colocação em escala, da segurança e do monitoramento de seus modelos, liberando você da sobrecarga de configurar e gerenciar a infraestrutura subjacente. As máquinas virtuais são provisionadas em seu nome quando você implanta modelos. Você pode ter várias implantações atrasadas e dividir o tráfego ou espelhar o tráfego entre elas. O tráfego espelhado ajuda você a testar novas versões de modelos no tráfego de produção sem liberá-los em ambientes de produção. A divisão do tráfego permite que você aumente gradualmente o tráfego de produção para novas versões do modelo enquanto observa o desempenho. O Dimensionamento automático permite que você aumente ou diminua dinamicamente os recursos com base nas cargas de trabalho. Você pode configurar o dimensionamento com base em métricas de utilização, em um agendamento específico ou em uma combinação de ambos. Um exemplo de dimensionamento baseado em métricas de utilização é adicionar nós se a utilização da CPU for maior a 70%. Um exemplo de dimensionamento baseado em agendamento é adicionar nós com base no horário comercial de pico.

Implantar modelos através do hub do HuggingFace usando o Studio

Para encontrar um modelo a ser implantado, abra o catálogo de modelos no Estúdio do Azure Machine Learning. Selecione “Todos os filtros” e, em seguida, selecione “HuggingFace” na seção Filtrar por coleções. Selecione o bloco do modelo para abrir a página do modelo.

Implantar o modelo

Escolha a opção de implantação em tempo real para abrir a caixa de diálogo de implantação rápida. Especifique as seguintes opções:

  • Selecione o modelo para GPU ou CPU. Os tipos de instância de CPU são bons para testes e os tipos de instância de GPU oferecem melhor desempenho na produção. Os modelos grandes não cabem em um tipo de instância de CPU.
  • Selecione o tipo de instância. Essa lista de instâncias é filtrada até as que se espera que o modelo implemente sem ficar sem memória.
  • Selecione o número de instâncias. Uma instância é suficiente para testes, mas recomendamos considerar duas ou mais instâncias para produção.
  • Opcionalmente, especifique um ponto de extremidade e um nome de implantação.
  • Escolha implantar. Em seguida, você será direcionado para a página do ponto de extremidade, o que pode levar alguns segundos. A implantação leva vários minutos para ser concluída com base no tamanho do modelo e no tipo de instância.

Observação: se você quiser fazer a implantação em um ponto de extremidade existente, selecione More options na caixa de diálogo de implantação rápida e use o assistente de implantação completo.

Testar o modelo implantado

Quando a implantação for concluída, você poderá encontrar o ponto de extremidade REST do modelo na página de pontos de extremidade, que pode ser usado para pontuar o modelo. Você encontra opções para adicionar mais implantações, gerenciar o tráfego e dimensionar o hub de pontos de extremidade. Você também usa a guia Teste na página do ponto de extremidade para testar o modelo com entradas de amostra. As entradas de amostra estão disponíveis na página do modelo. Você pode encontrar o formato de entrada, os parâmetros e as entradas de amostra na Documentação da API de inferência do Hub do Hugging Face.

Implantar modelos através do hub do HuggingFace usando o SDK do Python

Configurar o SDK do Python.

Encontre o modelo a ser implantado

Navegue pelo catálogo de modelos no Estúdio do Azure Machine Learning e encontre o modelo que você deseja implantar. Copie o nome do modelo que você deseja implantar. Importar as bibliotecas necessárias. Os modelos mostrados no catálogo estão listados a partir do registro HuggingFace. Crie o model_id usando o nome do modelo que você copiou do catálogo de modelos e do registro HuggingFace. Neste exemplo, você implanta o modelo bert_base_uncased com a versão mais recente.

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    ManagedOnlineEndpoint,
    ManagedOnlineDeployment,
    Model,
    Environment,
    CodeConfiguration,
)
registry_name = "HuggingFace"
model_name = "bert_base_uncased"
model_id = f"azureml://registries/{registry_name}/models/{model_name}/labels/latest"

Implantar o modelo

Crie um ponto de extremidade online. Em seguida, crie a implantação. Por fim, defina todo o tráfego para usar essa implantação. Você pode encontrar a CPU ou GPU instance_type ideal para um modelo abrindo a caixa de diálogo de implantação rápida na página do modelo no catálogo de modelos. Certifique-se de usar um instance_type para o qual você tenha cota.

import time
endpoint_name="hf-ep-" + str(int(time.time())) # endpoint name must be unique per Azure region, hence appending timestamp 
ml_client.begin_create_or_update(ManagedOnlineEndpoint(name=endpoint_name) ).wait()
ml_client.online_deployments.begin_create_or_update(ManagedOnlineDeployment(
    name="demo",
    endpoint_name=endpoint_name,
    model=model_id,
    instance_type="Standard_DS2_v2",
    instance_count=1,
)).wait()
endpoint = ml_client.online_endpoints.get(endpoint_name)
endpoint.traffic = {"demo": 100}
ml_client.begin_create_or_update(endpoint).result()

Testar o modelo implantado

Crie um arquivo com entradas que possam ser enviadas ao ponto de extremidade online para pontuação. Abaixo está o exemplo de código de entrada para o tipo fill-mask desde que implantamos o modelo bert-base-uncased. Você pode encontrar o formato de entrada, os parâmetros e as entradas de amostra na Documentação da API de inferência do Hub do Hugging Face.

import json
scoring_file = "./sample_score.json"
with open(scoring_file, "w") as outfile:
    outfile.write('{"inputs": ["Paris is the [MASK] of France.", "The goal of life is [MASK]."]}')   
response = workspace_ml_client.online_endpoints.invoke(
    endpoint_name=endpoint_name,
    deployment_name="demo",
    request_file=scoring_file,
)
response_json = json.loads(response)
print(json.dumps(response_json, indent=2))

Implantar modelos através do hub do HuggingFace usando a CLI

Configurar a CLI.

Encontre o modelo a ser implantado

Navegue pelo catálogo de modelos no Estúdio do Azure Machine Learning e encontre o modelo que você deseja implantar. Copie o nome do modelo que você deseja implantar. Os modelos mostrados no catálogo estão listados a partir do registro HuggingFace. Neste exemplo, você implanta o modelo bert_base_uncased com a versão mais recente.

Implantar o modelo

Você precisa do model e do instance_type para implantar o modelo. Você pode encontrar a CPU ou GPU instance_type ideal para um modelo abrindo a caixa de diálogo de implantação rápida na página do modelo no catálogo de modelos. Certifique-se de usar um instance_type para o qual você tenha cota.

Os modelos mostrados no catálogo estão listados a partir do registro HuggingFace. Neste exemplo, você implanta o modelo bert_base_uncased com a versão mais recente. A ID do ativo model totalmente qualificado com base no nome do modelo e no registro é azureml://registries/HuggingFace/models/bert-base-uncased/labels/latest. Criamos o arquivo deploy.yml usado para o comando az ml online-deployment create embutido.

Crie um ponto de extremidade online. Em seguida, crie a implantação.

# create endpoint
endpoint_name="hf-ep-"$(date +%s)
model_name="bert-base-uncased"
az ml online-endpoint create --name $endpoint_name 

# create deployment file. 
cat <<EOF > ./deploy.yml
name: demo
model: azureml://registries/HuggingFace/models/$model_name/labels/latest
endpoint_name: $endpoint_name
instance_type: Standard_DS3_v2
instance_count: 1
EOF
az ml online-deployment create --file ./deploy.yml --workspace-name $workspace_name --resource-group $resource_group_name

Testar o modelo implantado

Crie um arquivo com entradas que possam ser enviadas ao ponto de extremidade online para pontuação. Hugging Face como uma entrada de exemplo de código para o tipo fill-mask de nosso modelo implantado, o modelo bert-base-uncased. Você pode encontrar o formato de entrada, os parâmetros e as entradas de amostra na Documentação da API de inferência do Hub do Hugging Face.

scoring_file="./sample_score.json"
cat <<EOF > $scoring_file
{
  "inputs": [
    "Paris is the [MASK] of France.",
    "The goal of life is [MASK]."
  ]
}
EOF
az ml online-endpoint invoke --name $endpoint_name --request-file $scoring_file

Código de exemplo do Modelo de Detecção Facial

Siga este link para encontrar o código de exemplo de modelo de detecção facial para vários cenários, incluindo classificação de token, tradução, resposta a perguntas e classificação de zero shot.

Solução de problemas: Erros de implantação e modelos sem suporte

O hub do HuggingFace tem milhares de modelos, com centenas sendo atualizados todos os dias. Somente os modelos mais populares da coleção são testados e outros podem falhar com um dos erros abaixo.

Modelos restritos

Os modelos restritos exigem que os usuários concordem em compartilhar suas informações de contato e aceitem os termos e condições dos proprietários do modelo para acessar o modelo. A tentativa de implantar esses modelos falhará com um KeyError.

Modelos que precisam de executar código remoto

Os modelos normalmente usam o código do SDK de transformadores, mas alguns modelos executam o código do repositório de modelos. Esses modelos precisam definir o parâmetro trust_remote_code para True. Siga este link para saber mais sobre como usar código remoto. Por motivos de segurança, não há suporte para esse tipo de modelo. A tentativa de implantar esses modelos falhará com o seguinte erro: ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you have read the code there to avoid malicious use, then set the option trust_remote_code=True to remove this error.

Modelos com tokenizadores incorretos

Um tokenizador especificado incorretamente ou ausente no pacote do modelo pode resultar em um erro OSError: Can't load tokenizer for <model>.

Bibliotecas ausentes

Alguns modelos precisam de bibliotecas adicionais de Python. Você pode instalar as bibliotecas ausentes ao executar modelos localmente. Os modelos que precisam de bibliotecas especiais além das bibliotecas de transformadores padrão falharão com erro ModuleNotFoundError ou ImportError.

Memória insuficiente

Se você vir o OutOfQuota: Container terminated due to insufficient memory, tente usar um instance_type com mais memória.

Perguntas frequentes

Onde estão armazenados os pesos do modelo?

Os modelos do Hugging Face são apresentados no catálogo de modelos do Azure Machine Learning através do registro HuggingFace. O Hugging Face cria e gerencia esse registro e é disponibilizado para o Azure Machine Learning como um Registro da Comunidade. Os pesos do modelo não estão hospedados no Azure. Os pesos são baixados diretamente no Hub do Hugging Face para os pontos de extremidade online em seu espaço de trabalho quando esses modelos são implantados. O registro HuggingFace no AzureML funciona como um catálogo para ajudar a descobrir e implantar modelos do hub do HuggingFace no Azure Machine Learning.

Como implantar os modelos para inferência em lote? No momento, não há suporte para a implantação desses modelos em pontos de extremidade de lote para inferência em lote.

Posso usar modelos do registro HuggingFace como entrada para trabalhos para que eu possa ajustar esses modelos usando o SDK de transformadores? Como os pesos do modelo não são armazenados no registro HuggingFace, não é possível acessar os pesos do modelo usando esses modelos como entradas para trabalhos.

Como fazer para obter suporte se minhas implantações falharem ou se a inferência não funcionar como esperado?HuggingFace é um registro da comunidade e não é coberto pelo suporte da Microsoft. Analise os logs de implantação e descubra se o problema está relacionado à plataforma do Azure Machine Learning ou se é específico dos transformadores HuggingFace. Entre em contato com o suporte da Microsoft para qualquer problema de plataforma. Por exemplo, não é possível criar um ponto de extremidade online ou a autenticação na API REST do ponto de extremidade que não funciona. Para problemas específicos de transformadores, use o Fórum do HuggingFace ou o Suporte do HuggingFace.

O que é um registro da comunidade? Os registros da comunidade são registros do Azure Machine Learning criados por parceiros confiáveis do Azure Machine Learning e disponíveis para todos os usuários do Azure Machine Learning.

Onde os usuários podem enviar perguntas e dúvidas sobre a Hugging Face no Azure Machine Learning? Envie suas perguntas no fórum de discussão do Azure Machine Learning.

Disponibilidade regional

Atualmente, a Coleção Hugging Face está disponível em todas as regiões da nuvem pública.