Partilhar via


Implementar modelos do hub HuggingFace em pontos finais online do Azure Machine Learning para inferência em tempo real

A Microsoft estabeleceu uma parceria com a Hugging Face para oferecer modelos open-source do Hugging Face Hub no Azure Machine Learning. Hugging Face é o criador de Transformers, uma biblioteca amplamente popular para a construção de grandes modelos de linguagem. O hub de modelos da Hugging Face que tem milhares de modelos de open source. A integração com o Azure Machine Learning permite que você implante modelos de código aberto de sua escolha para proteger e escalonar a infraestrutura de inferência no Azure. Você pode pesquisar a partir de 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 endpoint online gerenciado oferece uma API REST segura para pontuar seu modelo em tempo real.

Nota

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

Benefícios do uso de endpoints on-line para inferência em tempo real

Os pontos finais online geridos no Azure Machine Learning ajudam-no a implementar modelos em poderosas máquinas de CPU e GPU no Azure de uma forma chave-na-mão. Os pontos finais online geridos tratam de servir, dimensionar, proteger e monitorizar os modelos, ao libertá-lo da sobrecarga de configuração e gestão da infraestrutura subjacente. As máquinas virtuais são provisionadas em seu nome quando você implanta modelos. Você pode ter várias implantações por trás e dividir o tráfego ou espelhar o tráfego para essas implantações. O tráfego de espelho 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 aumentar gradualmente o tráfego de produção para novas versões do modelo enquanto observa o desempenho. O dimensionamento automático permite aumentar ou reduzir dinamicamente os recursos com base em cargas de trabalho. Você pode configurar o dimensionamento com base em métricas de utilização, um cronograma específico ou uma combinação de ambos. Um exemplo de dimensionamento com base em métricas de utilização é adicionar nós se a utilização da CPU for superior a 70%. Um exemplo de escalonamento baseado em programação é adicionar nós com base no horário comercial de pico.

Implante modelos de hub HuggingFace usando o Studio

Para localizar 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 secção Filtrar por coleções. Selecione o bloco do modelo para abrir a página do modelo.

Implementar 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 em produção. Os modelos grandes não se encaixam em um tipo de instância de CPU.
  • Selecione o tipo de instância. Essa lista de instâncias é filtrada para aquelas que o modelo deve implantar 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.
  • Selecione implantar. Em seguida, você é navegado para a página do ponto final, 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.

Nota: Se você quiser implantar 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 implementado

Quando a implantação for concluída, você poderá encontrar o ponto de extremidade REST para o modelo na página de pontos de extremidade, que pode ser usada 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 exemplo. As entradas de amostra estão disponíveis na página do modelo. Você pode encontrar o formato de entrada, parâmetros e entradas de exemplo na documentação da API de inferência do hub Hugging Face.

Implementar modelos do Hugging Face Hub utilizando o Python SDK

Configure o Python SDK.

Encontre o modelo a ser implantado

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

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"

Implementar 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ê tem 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 implementado

Crie um arquivo com entradas que podem ser enviadas para o ponto de extremidade online para pontuação. Abaixo entrada de exemplo de código para o fill-mask tipo desde que implantamos o bert-base-uncased modelo. Você pode encontrar o formato de entrada, parâmetros e entradas de exemplo na documentação da API de inferência do hub 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))

Implementar modelos do Hugging Face Hub utilizando a CLI

Configure a CLI.

Encontre o modelo a ser implantado

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

Implementar o modelo

Você precisa do model e 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ê tem cota.

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

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 implementado

Crie um arquivo com entradas que podem ser enviadas para o ponto de extremidade online para pontuação. Hugging Face como uma entrada de exemplo de código para o tipo para o fill-mask nosso modelo implantado o bert-base-uncased modelo. Você pode encontrar o formato de entrada, parâmetros e entradas de exemplo na documentação da API de inferência do hub 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 Hugging Face

Siga este link para encontrar o código de exemplo do modelo de rosto abraçado para vários cenários, incluindo classificação de token, tradução, resposta a perguntas e classificação de tiro zero.

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

O Hugging Face Hub tem milhares de modelos e centenas são atualizados todos os dias. Apenas os modelos mais populares da coleção são testados e outros podem falhar com um dos erros abaixo.

Modelos fechados

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

Modelos que têm de executar código remoto

Os modelos normalmente usam o código do SDK dos transformadores, mas alguns modelos executam o código do repositório do modelo. Esses modelos precisam definir o parâmetro trust_remote_code como True. Siga este link para saber mais sobre como usar código remoto. Tais modelos não são suportados por manter a segurança em mente. 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

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

Bibliotecas em falta

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

Memória insuficiente

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

Perguntas mais frequentes

Onde são armazenados os pesos do modelo?

Os modelos Hugging Face são apresentados no catálogo de modelos do Azure Machine Learning através do HuggingFace registo. 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 do hub Hugging Face para os pontos de extremidade on-line em seu espaço de trabalho quando esses modelos são implantados. HuggingFace no AzureML funciona como um catálogo para ajudar a descobrir e implantar modelos de hub HuggingFace no Azure Machine Learning.

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

Posso usar modelos do HuggingFace registro 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 HuggingFace registro, você não pode acessar os pesos do modelo usando esses modelos como entradas para trabalhos.

Como faço para obter suporte se minhas implantações falharem ou a inferência não funcionar conforme o esperado?HuggingFace é um registo comunitário e não é abrangido pelo suporte da Microsoft. Analise os logs de implantação e descubra se o problema está relacionado à plataforma Azure Machine Learning ou específico aos transformadores HuggingFace. Contacte o suporte da Microsoft para quaisquer problemas de plataforma. Por exemplo, não ser capaz de criar ponto de extremidade online ou autenticação para a API REST do ponto de extremidade não funciona. Para problemas específicos dos transformadores, use o fórum HuggingFace ou o suporte HuggingFace.

O que é um registo comunitário? Os registos da comunidade são registos do Azure Machine Learning criados por parceiros fidedignos do Azure Machine Learning e disponíveis para todos os utilizadores do Azure Machine Learning.

Onde é que os utilizadores submetem perguntas e preocupações relacionadas com o HuggingFace no Azure Machine Learning? Envie suas perguntas no fórum de discussão do Azure Machine Learning.

Disponibilidade regional

Atualmente, a Hugging Face Collection está disponível apenas em todas as regiões da nuvem pública.