Como empacotar um modelo registrado com o Docker
Este artigo mostra como empacotar um modelo do Azure Machine Learning registrado com o Docker.
Pré-requisitos
Este artigo pressupõe que você já tenha treinamento e registrado um modelo no seu espaço de trabalho do Machine Learning. Para saber o treinamento e registro de um modelo scikit-learn, siga este tutorial.
Modelos de pacote
Em alguns casos, você pode querer criar uma imagem do Docker sem implantar o modelo. Ou talvez você queira baixar a imagem e executá-la em uma instalação do Docker local. Talvez você queira baixar os arquivos usados para criar a imagem, inspecioná-los, modificá-los e criar a imagem manualmente.
O modelo de pacote permite que você faça essas coisas. Ele empacota todos os ativos necessários para hospedar um modelo como um serviço Web e permite que você baixe uma imagem do Docker totalmente criada ou os arquivos necessários para criar uma. Há duas maneiras de usar o modelo de pacote:
Baixe um modelo de pacote: Baixe uma imagem do Docker que contém o modelo e outros arquivos necessários para hospedá-lo como um serviço Web.
Gere um Dockerfile: Baixe o Dockerfile, o modelo, o script de entrada e outros ativos necessários para criar uma imagem do Docker. Você pode examinar os arquivos ou fazer alterações antes de criar a imagem localmente.
Ambos os pacotes podem ser usados para obter uma imagem do Docker local.
Dica
A criação de um pacote é parecido à implantação de um modelo. Você emprega um modelo registrado e uma configuração de inferência.
Importante
Para baixar uma imagem criada completamente ou criar uma imagem localmente, você precisará ter o Docker instalado em seu ambiente de desenvolvimento.
Baixe um modelo de pacote
O exemplo seguinte cria uma imagem, é registrada no registro de contêiner do Azure do seu espaço de trabalho:
package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)
Após criar um pacote, você pode usarpackage.pull()
para efetuar pull da imagem no ambiente do Docker local. A saída deste comando exibirá o nome da imagem. Por exemplo:
Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338
.
Após baixar o modelo, use o docker images
comando para listar as imagens locais:
REPOSITORY TAG IMAGE ID CREATED SIZE
myworkspacef78fd10.azurecr.io/package 20190822181338 7ff48015d5bd 4 minutes ago 1.43 GB
Para iniciar um contêiner local com base nessa imagem, use o comando seguinte para iniciar um contêiner nomeado do Shell ou da linha de comando. Substitua o <imageid>
valor pela ID da imagem desenvolvida pelo docker images
comando.
docker run -p 6789:5001 --name mycontainer <imageid>
Este comando iniciará a versão mais recente da imagem chamada myimage
. Ele mapeia a porta local 6789 para a porta do contêiner em que o serviço Web esteja escutando (5001). Ele também atribui o nomemycontainer
ao contêiner, o qual torna o contêiner mais fácil de parar. Após o contêiner ser iniciado, você pode enviar solicitações parahttp://localhost:6789/score
.
Gere um Dockerfile e dependências
O próximo exemplo mostra como baixar o Dockerfile, o modelo e outros ativos necessários para criar uma imagem localmente. O generate_dockerfile=True
parâmetro indica que você deseja os arquivos e não uma imagem totalmente compilada.
package = Model.package(ws, [model], inference_config, generate_dockerfile=True)
package.wait_for_creation(show_output=True)
# Download the package.
package.save("./imagefiles")
# Get the Azure container registry that the model/Dockerfile uses.
acr=package.get_container_registry()
print("Address:", acr.address)
print("Username:", acr.username)
print("Password:", acr.password)
Este código baixa os arquivos necessários para criar a imagem noimagefiles
diretório. O Dockerfile incluído nos arquivos salvos faz referência com base em uma imagem armazenada em um registro de contêiner do Azure. Ao criar a imagem na instalação local do Docker, você precisa usar o endereço, o nome de usuário e a senha para autenticar-se no registro. Use as próximas etapas para criar a imagem usando uma instalação local do Docker:
Da sessão de linha de comando ou Shell, use o comando a seguir para autenticar o Docker com o registro de contêiner do Azure. Substitua
<address>
,<username>
e<password>
pelos valores recuperadospackage.get_container_registry()
.docker login <address> -u <username> -p <password>
Para criar a imagem, use o comando a seguir. Substitua
<imagefiles>
o caminho do diretório em quepackage.save()
os arquivos foram salvos.docker build --tag myimage <imagefiles>
Este comando define o nome da imagem como
myimage
.
Para verificar que a imagem foi criada, use o docker images
comando. Você deve ver amyimage
imagem na lista:
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 2d5ee0bf3b3b 49 seconds ago 1.43 GB
myimage latest 739f22498d64 3 minutes ago 1.43 GB
Para começar um novo contêiner com base nesta imagem, use o seguinte comando:
docker run -p 6789:5001 --name mycontainer myimage:latest
Este comando iniciará a versão mais recente da imagem chamada myimage
. Ele mapeia a porta local 6789 para a porta do contêiner em que o serviço Web esteja escutando (5001). Ele também atribui o nomemycontainer
ao contêiner, o qual torna o contêiner mais fácil de parar. Após o contêiner ser iniciado, você pode enviar solicitações parahttp://localhost:6789/score
.
Cliente exemplo para testar o contêiner local
O código seguinte é um exemplo de um cliente Python que pode ser usado com o contêiner:
import requests
import json
# URL for the web service.
scoring_uri = 'http://localhost:6789/score'
# Two sets of data to score, so we get two results back.
data = {"data":
[
[ 1,2,3,4,5,6,7,8,9,10 ],
[ 10,9,8,7,6,5,4,3,2,1 ]
]
}
# Convert to JSON string.
input_data = json.dumps(data)
# Set the content type.
headers = {'Content-Type': 'application/json'}
# Make the request and display the response.
resp = requests.post(scoring_uri, input_data, headers=headers)
print(resp.text)
Por exemplo,os clientes computadores de outras linguagens de programação,vejaConsumir os modelos implantados dos serviços Web.
Detenha o contêiner do Docker
Para interromper o contêiner, use comando a seguir de um shell ou de linha de comando diferente:
docker kill mycontainer
Próximas etapas
- Solucionar problemas de uma implantação com falha
- Implantar no Serviço de Kubernetes do Azure
- Criar aplicativos cliente para consumir serviços Web
- Atualizar serviço Web
- Como implantar um modelo usando uma imagem personalizada do Docker
- Use o TLS para proteger um serviço Web por meio do Azure Machine Learning
- Monitorar seus modelos do Azure Machine Learning com o Application Insights
- Coletar dados para modelos em produção
- Criar gatilhos e alertas de eventos para implantações de modelo