Zabalení registrovaného modelu do Dockeru
Tento článek ukazuje, jak zabalit zaregistrovaný model Azure Machine Learning do Dockeru.
Požadavky
Tento článek předpokládá, že jste už vytrénovali a zaregistrovali model v pracovním prostoru strojového učení. Pokud chcete zjistit, jak trénovat a zaregistrovat model scikit-learn, postupujte podle tohoto kurzu.
Modely balíčků
V některých případech můžete chtít vytvořit image Dockeru bez nasazení modelu. Nebo můžete chtít stáhnout image a spustit ji v místní instalaci Dockeru. Můžete dokonce chtít stáhnout soubory použité k sestavení image, zkontrolovat je, upravit a sestavit ručně.
Balení modelů vám umožňuje tyto věci provádět. Všechny prostředky potřebné k hostování modelu jako webové služby se zabalí a můžete si stáhnout buď plně sestavenou image Dockeru, nebo soubory potřebné k jejímu sestavení. Balení modelů můžete použít dvěma způsoby:
Stažení zabaleného modelu: Stáhněte si image Dockeru, která obsahuje model a další soubory potřebné k jeho hostování jako webové služby.
Vygenerujte soubor Dockerfile: Stáhněte soubor Dockerfile, model, vstupní skript a další prostředky potřebné k sestavení image Dockeru. Před místním sestavením image pak můžete zkontrolovat soubory nebo provést změny.
Oba balíčky je možné použít k získání místní image Dockeru.
Tip
Vytvoření balíčku se podobá nasazení modelu. Použijete zaregistrovaný model a konfiguraci odvozování.
Důležité
Pokud chcete stáhnout plně sestavenou image nebo sestavit image místně, musíte mít Docker nainstalovaný ve vašem vývojovém prostředí.
Stažení zabaleného modelu
Následující příklad vytvoří image, která je zaregistrovaná ve službě Azure Container Registry pro váš pracovní prostor:
package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)
Po vytvoření balíčku můžete image package.pull()
načíst do místního prostředí Dockeru. Výstup tohoto příkazu zobrazí název obrázku. Příklad:
Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338
.
Po stažení modelu pomocí docker images
příkazu zobrazte seznam místních imagí:
REPOSITORY TAG IMAGE ID CREATED SIZE
myworkspacef78fd10.azurecr.io/package 20190822181338 7ff48015d5bd 4 minutes ago 1.43 GB
Pokud chcete spustit místní kontejner založený na této imagi, pomocí následujícího příkazu spusťte pojmenovaný kontejner z prostředí nebo příkazového řádku. <imageid>
Nahraďte hodnotu ID obrázku vráceným příkazemdocker images
.
docker run -p 6789:5001 --name mycontainer <imageid>
Tento příkaz spustí nejnovější verzi image s názvem myimage
. Mapuje místní port 6789 na port v kontejneru, na kterém webová služba naslouchá (5001). Také přiřadí název mycontainer
kontejneru, což usnadňuje zastavení kontejneru. Po spuštění kontejneru můžete odeslat žádosti do http://localhost:6789/score
.
Generování souboru Dockerfile a závislostí
Následující příklad ukazuje, jak stáhnout soubor Dockerfile, model a další prostředky potřebné k místnímu sestavení image. Parametr generate_dockerfile=True
označuje, že chcete soubory, nikoli plně sestavenou image.
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)
Tento kód stáhne soubory potřebné k sestavení image do imagefiles
adresáře. Soubor Dockerfile zahrnutý v uložených souborech odkazuje na základní image uloženou v registru kontejneru Azure. Když image sestavíte v místní instalaci Dockeru, musíte k ověření v registru použít adresu, uživatelské jméno a heslo. Pomocí následujících kroků sestavte image pomocí místní instalace Dockeru:
V prostředí nebo relaci příkazového řádku pomocí následujícího příkazu ověřte Docker pomocí registru kontejneru Azure. Nahraďte a
<username>
<password>
nahraďte<address>
hodnotami načtenými parametrempackage.get_container_registry()
.docker login <address> -u <username> -p <password>
K sestavení image použijte následující příkaz. Nahraďte
<imagefiles>
cestou k adresáři, do kteréhopackage.save()
jsou uložené soubory.docker build --tag myimage <imagefiles>
Tento příkaz nastaví název image na
myimage
.
Pokud chcete ověřit, že je image sestavená, použijte docker images
příkaz. Obrázek by se měl zobrazit myimage
v seznamu:
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 2d5ee0bf3b3b 49 seconds ago 1.43 GB
myimage latest 739f22498d64 3 minutes ago 1.43 GB
Pokud chcete spustit nový kontejner založený na této imagi, použijte následující příkaz:
docker run -p 6789:5001 --name mycontainer myimage:latest
Tento příkaz spustí nejnovější verzi image s názvem myimage
. Mapuje místní port 6789 na port v kontejneru, na kterém webová služba naslouchá (5001). Také přiřadí název mycontainer
kontejneru, což usnadňuje zastavení kontejneru. Po spuštění kontejneru můžete odeslat žádosti do http://localhost:6789/score
.
Příklad klienta pro otestování místního kontejneru
Následující kód je příkladem klienta Pythonu, který se dá použít s kontejnerem:
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)
Například klienti v jiných programovacích jazycích najdete v tématu Využívání modelů nasazených jako webové služby.
Zastavení kontejneru Dockeru
Pokud chcete kontejner zastavit, použijte následující příkaz z jiného prostředí nebo příkazového řádku:
docker kill mycontainer
Další kroky
- Řešení potíží s neúspěšným nasazením
- Nasazení do služby Azure Kubernetes Service
- Vytváření klientských aplikací pro využívání webových služeb
- Aktualizace webové služby
- Nasazení modelu pomocí vlastní image Dockeru
- Zabezpečení webové služby prostřednictvím služby Azure Machine Learning s využitím protokolu TLS
- Monitorování modelů Azure Machine Learning pomocí Application Insights
- Shromažďování dat pro modely v produkčním prostředí
- Vytváření upozornění a triggerů událostí pro nasazení modelů