Een geregistreerd model verpakken met Docker
In dit artikel wordt beschreven hoe u een geregistreerd Azure Machine Learning-model inpakt met Docker.
Vereisten
In dit artikel wordt ervan uitgegaan dat u al een model hebt getraind en geregistreerd in uw machine learning-werkruimte. Volg deze zelfstudie voor meer informatie over het trainen en registreren van een scikit-learn-model.
Pakketmodellen
In sommige gevallen wilt u mogelijk een Docker-installatiekopieën maken zonder het model te implementeren. Of misschien wilt u de installatiekopieën downloaden en uitvoeren op een lokale Docker-installatie. Mogelijk wilt u zelfs de bestanden downloaden die worden gebruikt om de installatiekopieën te bouwen, ze te inspecteren, te wijzigen en de installatiekopieën handmatig te bouwen.
Met modelverpakkingen kunt u deze dingen doen. Het verpakt alle assets die nodig zijn om een model als een webservice te hosten en stelt u in staat om een volledig gebouwde Docker-installatiekopie of de bestanden te downloaden die nodig zijn om er een te bouwen. Er zijn twee manieren om modelverpakkingen te gebruiken:
Download een verpakt model: Download een Docker-installatiekopie met het model en andere bestanden die nodig zijn om het als webservice te hosten.
Een Dockerfile genereren: download het Dockerfile, model, invoerscript en andere assets die nodig zijn om een Docker-installatiekopieën te bouwen. U kunt vervolgens de bestanden inspecteren of wijzigingen aanbrengen voordat u de installatiekopieën lokaal bouwt.
Beide pakketten kunnen worden gebruikt om een lokale Docker-installatiekopieën op te halen.
Tip
Het maken van een pakket is vergelijkbaar met het implementeren van een model. U gebruikt een geregistreerd model en een deductieconfiguratie.
Belangrijk
Als u een volledig gebouwde installatiekopie wilt downloaden of lokaal een installatiekopie wilt bouwen, moet Docker zijn geïnstalleerd in uw ontwikkelomgeving.
Een verpakt model downloaden
In het volgende voorbeeld wordt een installatiekopieën gemaakt die is geregistreerd in het Azure-containerregister voor uw werkruimte:
package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)
Nadat u een pakket hebt gemaakt, kunt u de installatiekopie naar package.pull()
uw lokale Docker-omgeving halen. In de uitvoer van deze opdracht wordt de naam van de afbeelding weergegeven. Voorbeeld:
Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338
.
Nadat u het model hebt gedownload, gebruikt u de docker images
opdracht om de lokale installatiekopieën weer te geven:
REPOSITORY TAG IMAGE ID CREATED SIZE
myworkspacef78fd10.azurecr.io/package 20190822181338 7ff48015d5bd 4 minutes ago 1.43 GB
Als u een lokale container wilt starten op basis van deze installatiekopie, gebruikt u de volgende opdracht om een benoemde container te starten vanaf de shell of opdrachtregel. Vervang de <imageid>
waarde door de afbeeldings-id die wordt geretourneerd door de docker images
opdracht.
docker run -p 6789:5001 --name mycontainer <imageid>
Met deze opdracht wordt de nieuwste versie van de installatiekopieën met de naam gestart myimage
. Hiermee wordt lokale poort 6789 toegewezen aan de poort in de container waarop de webservice luistert (5001). Ook wordt de naam mycontainer
toegewezen aan de container, waardoor de container gemakkelijker te stoppen is. Nadat de container is gestart, kunt u aanvragen indienen bij http://localhost:6789/score
.
Een Dockerfile en afhankelijkheden genereren
In het volgende voorbeeld ziet u hoe u het Dockerfile, model en andere assets downloadt die nodig zijn om lokaal een installatiekopieën te bouwen. De generate_dockerfile=True
parameter geeft aan dat u de bestanden wilt, niet een volledig gebouwde installatiekopie.
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)
Met deze code worden de bestanden gedownload die nodig zijn om de installatiekopieën naar de imagefiles
map te bouwen. Het Dockerfile dat is opgenomen in de opgeslagen bestanden verwijst naar een basisinstallatiekopieën die zijn opgeslagen in een Azure-containerregister. Wanneer u de installatiekopieën in uw lokale Docker-installatie bouwt, moet u het adres, de gebruikersnaam en het wachtwoord gebruiken om te verifiëren bij het register. Gebruik de volgende stappen om de installatiekopieën te bouwen met behulp van een lokale Docker-installatie:
Gebruik vanuit een shell- of opdrachtregelsessie de volgende opdracht om Docker te verifiëren met het Azure-containerregister. Vervang
<address>
,<username>
en<password>
door de waarden die zijn opgehaald doorpackage.get_container_registry()
.docker login <address> -u <username> -p <password>
Gebruik de volgende opdracht om de installatiekopieën te bouwen. Vervang
<imagefiles>
door het pad van de map waarpackage.save()
de bestanden zijn opgeslagen.docker build --tag myimage <imagefiles>
Met deze opdracht stelt u de naam van de installatiekopieën in op
myimage
.
Gebruik de docker images
opdracht om te controleren of de installatiekopie is gemaakt. U ziet nu de myimage
afbeelding in de lijst:
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 2d5ee0bf3b3b 49 seconds ago 1.43 GB
myimage latest 739f22498d64 3 minutes ago 1.43 GB
Gebruik de volgende opdracht om een nieuwe container te starten op basis van deze installatiekopieën:
docker run -p 6789:5001 --name mycontainer myimage:latest
Met deze opdracht wordt de nieuwste versie van de installatiekopieën met de naam gestart myimage
. Hiermee wordt lokale poort 6789 toegewezen aan de poort in de container waarop de webservice luistert (5001). Ook wordt de naam mycontainer
toegewezen aan de container, waardoor de container gemakkelijker te stoppen is. Nadat de container is gestart, kunt u aanvragen indienen bij http://localhost:6789/score
.
Voorbeeldclient om de lokale container te testen
De volgende code is een voorbeeld van een Python-client die kan worden gebruikt met de container:
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)
Zie Bijvoorbeeld clients in andere programmeertalen Modellen gebruiken die zijn geïmplementeerd als webservices.
De Docker-container stoppen
Gebruik de volgende opdracht vanuit een andere shell of opdrachtregel om de container te stoppen:
docker kill mycontainer
Volgende stappen
- Problemen met een mislukte implementatie oplossen
- Implementeren in Azure Kubernetes Service
- Clienttoepassingen maken om webservices te gebruiken
- Webservice bijwerken
- Een model implementeren met behulp van een aangepaste Docker-installatiekopieën
- TLS gebruiken om een webservice te beveiligen via Azure Machine Learning
- Uw Azure Machine Learning-modellen bewaken met Application Insights
- Gegevens verzamelen voor modellen in productie
- Gebeurteniswaarschuwingen en triggers maken voor modelimplementaties