Sdílet prostřednictvím


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:

  1. 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 parametrem package.get_container_registry().

    docker login <address> -u <username> -p <password>
    
  2. K sestavení image použijte následující příkaz. Nahraďte <imagefiles> cestou k adresáři, do kterého package.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