Implementar modelos do hub Hugging Face para endpoints online do Azure Machine Learning para inferência em tempo real

A Microsoft fez parceria com a Hugging Face para trazer modelos open-source do Hugging Face Hub para o Azure Machine Learning. Hugging Face é o criador de Transformers, uma biblioteca amplamente popular para a construção de grandes modelos de linguagem. O repositório de modelos da Hugging Face tem milhares de modelos de código aberto. Ao integrar-se com o Azure Machine Learning, pode implementar modelos open-source à sua escolha para uma infraestrutura de inferência segura e escalável 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. Quando implementa o endpoint online gerido, dá-lhe uma API REST segura para pontuar o seu modelo em tempo real.

Note

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. É sua responsabilidade cumprir os termos da 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 endpoints online geridos tratam de servir, escalar, proteger e monitorizar os seus modelos, por isso não precisa de configurar e gerir a infraestrutura subjacente. As máquinas virtuais são provisionadas para si quando implementa modelos. Você pode ter várias implantações e dividir o tráfego ou espelhar o tráfego para essas implantações. O tráfego espelhado ajuda-o a testar novas versões de modelos em tráfego de produção sem os libertar para ambientes de produção. Dividir o tráfego permite-lhe aumentar gradualmente o tráfego de produção para novas versões de modelos 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, uma programação específica 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.

Implemente modelos de hub de Hugging Face utilizando 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 depois 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 CPU são bons para testes, e os tipos de instância GPU oferecem melhor desempenho em produção. Modelos grandes não cabem num tipo de instância de CPU.
  • Selecione o tipo de instância. Esta lista de instâncias é filtrada para mostrar apenas aquelas que podem implementar o modelo sem ficar sem memória.
  • Selecione o número de instâncias. Uma instância é suficiente para testes, mas considere duas ou mais instâncias para produção.
  • Opcionalmente, especifique um ponto de extremidade e um nome de implantação.
  • Selecione Implantar. Em seguida, será redirecionado para a página do endpoint, o que pode demorar 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.

Modelos fechados

Modelos com bloqueio são modelos que requerem aprovação do autor do modelo antes de serem utilizados. Para usar estes modelos:

  1. Peça para ler um rosto de abraços ou um token de granulação fina.
  2. Solicite acesso através da página do modelo em Hugging Face.
  3. Crie uma ligação de chave personalizada denominada HuggingFaceTokenConnection, com a chave HF_TOKEN e o valor sendo o seu token do Hugging Face marcado como segredo.
  4. Crie um endpoint com enforce_access_to_default_secret_stores definir para enabled.
  5. Implemente o modelo usando o endpoint recém-criado.

Testar o modelo implementado

Quando a implementação terminar, pode encontrar o endpoint REST do modelo na página de endpoints . Use este endpoint para pontuar o modelo. Encontras opções para adicionar mais implementações, gerir tráfego e escalar o hub dos Endpoints . Use o separador Teste na página do endpoint 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.

Implemente modelos de hub HuggingFace usando o SDK Python

Configurar o SDK Python.

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,
)
from azure.identity import DefaultAzureCredential

ml_client = MLClient(
    credential=DefaultAzureCredential(),
    subscription_id="<your-subscription-id>",
    resource_group_name="<your-resource-group>",
    workspace_name="<your-workspace-name>"
)


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

Cria um ficheiro com entradas que possas submeter ao endpoint online para pontuação. O exemplo de código nesta secção permite uma entrada para o fill-mask tipo, uma vez que implementou 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 = 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

Configura o 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

Precisas dos model valores e instance_type para implementar 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. Crias o deploy.yml ficheiro usado para o az ml online-deployment create comando em linha.

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

Cria um ficheiro com entradas que possas submeter ao endpoint online para pontuação. O Hugging Face fornece uma entrada de exemplo de código para o fill-mask tipo do modelo implementado bert-base-uncased . Pode encontrar o formato de entrada, parâmetros e entradas de amostra 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 hub do HuggingFace tem milhares de modelos, com centenas a serem atualizados diariamente. Apenas os modelos mais populares da coleção são testados, e outros podem falhar com um dos seguintes erros.

Modelos fechados

Os modelos bloqueados exigem que os utilizadores concordem em partilhar as suas informações de contacto e aceitem os termos e condições dos proprietários dos modelos para aceder ao modelo. Tentar implementar tais modelos sem seguir corretamente os passos anteriores falha com um KeyError.

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. Por razões de segurança, estes modelos não são suportados. A tentativa de implantar esses modelos falha com o seguinte erro: ValueError: Loading <model> requires you to execute the configuration file in that repo on your local machine. Make sure you read the code 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. Modelos que necessitam de bibliotecas especiais para além das bibliotecas padrão de transformadores falham com ModuleNotFoundError erro ImportError ou falham.

Memória insuficiente

Se vires o OutOfQuota: Container terminated due to insufficient memory erro, tenta usar um instance_type com mais memória.

Perguntas mais frequentes

Onde são armazenados os pesos do modelo?

Os modelos Hugging Face aparecem no catálogo de modelos do Azure Machine Learning através do HuggingFace registo. O Hugging Face cria e gere este registo e disponibiliza-o ao Azure Machine Learning como um Registo Comunitário. Os pesos do modelo não estão hospedados no Azure. Quando implementa estes modelos, os endpoints online no seu espaço de trabalho descarregam os pesos diretamente do hub Hugging Face. O HuggingFace registo no Azure Machine Learning funciona como um catálogo para o ajudar a descobrir e implementar modelos hub Hugging Face no Azure Machine Learning.

Que modelos são suportados?

O Azure suporta modelos Hugging Face que cumprem os seguintes critérios:

  • O modelo tem ou as Transformersetiquetas , Diffusers, ou Sentence-Transformers no Hugging Face Hub.
  • O modelo tem uma tarefa suportada como chat-completion, image-to-text, ou embeddings.
  • Os pesos do modelo estão no formato Safetensors e o modelo não necessita de trust_remote_code.

Como é que implemento os modelos para inferência em lote? Atualmente, não podes implementar estes modelos em endpoints em lote para inferência em lote.

Posso usar modelos do HuggingFace registo como entrada para trabalhos para poder afinar esses modelos usando o SDK dos transformadores? Como os pesos dos modelos não estão armazenados no HuggingFace registo, não pode aceder aos pesos dos modelos usando esses modelos como entradas para os trabalhos.

Como posso obter apoio se as minhas implementações falharem ou se a inferência não funcionar como esperado?HuggingFace é um registo comunitário e o suporte da Microsoft não o cobre. Consulte os registos de implementação para descobrir se o problema está relacionado com a plataforma Azure Machine Learning ou específico com transformadores Hugging Face. Contacta o suporte da Microsoft para quaisquer problemas com a plataforma, como não conseguir criar pontos de extremidade online ou se a autenticação na API REST do ponto de extremidade não funcionar. Para questões específicas de transformers, cria um issue no GitHub, utiliza o fórum HuggingFace ou o suporte HuggingFace.

O que é um registo comunitário? Parceiros confiáveis do Azure Machine Learning criam registos comunitários como registos Azure Machine Learning. Todos os utilizadores do Azure Machine Learning podem aceder a eles.

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 ou abra um problema do GitHub.

Disponibilidade regional

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