Megosztás a következőn keresztül:


Regisztrált modell csomagolása a Dockerrel

Ez a cikk bemutatja, hogyan csomagolhat be egy regisztrált Azure Machine Learning-modellt a Dockerrel.

Előfeltételek

Ez a cikk feltételezi, hogy már betanított és regisztrált egy modellt a gépi tanulási munkaterületen. Ebből az oktatóanyagból megtudhatja, hogyan taníthat be és regisztrálhat scikit-learn modellt.

Csomagmodellek

Bizonyos esetekben előfordulhat, hogy a modell üzembe helyezése nélkül szeretne létrehozni egy Docker-lemezképet. Vagy egy helyi Docker-telepítésen szeretné letölteni és futtatni a lemezképet. Előfordulhat, hogy a rendszerkép létrehozásához, vizsgálatához, módosításához és a kép manuális létrehozásához használt fájlokat is le szeretné tölteni.

A modell csomagolása lehetővé teszi ezeket a műveleteket. A folyamat becsomagolja a modell webszolgáltatásként történő üzemeltetéséhez szükséges objektumok mindegyikét, és lehetővé teszi a teljes mértékben összeállított Docker-lemezkép vagy a lemezkép összeállításához szükséges fájlok letöltését. Kétféleképpen használhatja a modell csomagolását:

Csomagolt modell letöltése: Töltsön le egy Docker-lemezképet, amely tartalmazza a modellt és a webszolgáltatásként való üzemeltetéséhez szükséges egyéb fájlokat.

Docker-fájl létrehozása: Töltse le a Docker-rendszerkép létrehozásához szükséges Docker-fájlt, modellt, belépési szkriptet és egyéb eszközöket. Ezután megvizsgálhatja a fájlokat, vagy módosításokat végezhet a rendszerkép helyi létrehozása előtt.

Mindkét csomag használható helyi Docker-rendszerkép lekéréséhez.

Tipp

A csomagok létrehozása hasonlít a modellek üzembe helyezéséhez. Egy regisztrált modellt és egy következtetési konfigurációt használ.

Fontos

A teljes körűen elkészített rendszerkép letöltéséhez vagy helyileg történő létrehozásához telepítenie kell a Dockert a fejlesztői környezetben.

Csomagolt modell letöltése

Az alábbi példa létrehoz egy lemezképet, amely regisztrálva van a munkaterület Azure-tárolóregisztrációs adatbázisában:

package = Model.package(ws, [model], inference_config)
package.wait_for_creation(show_output=True)

A csomag létrehozása után lekérheti package.pull() a lemezképet a helyi Docker-környezetbe. A parancs kimenete megjeleníti a kép nevét. Például:

Status: Downloaded newer image for myworkspacef78fd10.azurecr.io/package:20190822181338.

A modell letöltése után az docker images paranccsal listázhatja a helyi rendszerképeket:

REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
myworkspacef78fd10.azurecr.io/package    20190822181338      7ff48015d5bd        4 minutes ago       1.43 GB

Ha a rendszerkép alapján szeretne elindítani egy helyi tárolót, az alábbi paranccsal indíthat el egy elnevezett tárolót a rendszerhéjból vagy a parancssorból. Cserélje le az <imageid> értéket a parancs által visszaadott képazonosítóra docker images .

docker run -p 6789:5001 --name mycontainer <imageid>

Ez a parancs a nevű rendszerkép myimagelegújabb verzióját indítja el. A 6789-ös helyi portot annak a tárolónak a portjára képezi le, amelyen a webszolgáltatás figyel (5001). A nevet mycontainer is hozzárendeli a tárolóhoz, ami megkönnyíti a tároló leállítását. A tároló elindítása után elküldheti a kéréseket a következőnek http://localhost:6789/score: .

Docker-fájl és függőségek létrehozása

Az alábbi példa bemutatja, hogyan töltheti le a dockerfile-t, a modellt és a rendszerkép helyi létrehozásához szükséges egyéb eszközöket. A generate_dockerfile=True paraméter azt jelzi, hogy a fájlokat szeretné, nem egy teljesen összeállított képet.

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)

Ez a kód letölti a lemezkép könyvtárba imagefiles való létrehozásához szükséges fájlokat. A mentett fájlokban található Docker-fájl egy Azure-tárolóregisztrációs adatbázisban tárolt alaprendszerképre hivatkozik. Amikor létrehozza a lemezképet a helyi Docker-telepítésen, a beállításjegyzékben való hitelesítéshez a címet, a felhasználónevet és a jelszót kell használnia. A rendszerkép helyi Docker-telepítéssel történő létrehozásához kövesse az alábbi lépéseket:

  1. Egy rendszerhéjban vagy parancssori munkamenetben az alábbi paranccsal hitelesítheti a Dockert az Azure Container Registryvel. Cserélje le <address>a , <username>a és <password> a értéket a által lekért értékekre package.get_container_registry().

    docker login <address> -u <username> -p <password>
    
  2. A rendszerkép létrehozásához használja az alábbi parancsot. Cserélje le a elemet <imagefiles> annak a könyvtárnak az elérési útjára, ahová package.save() a fájlokat mentette.

    docker build --tag myimage <imagefiles>
    

    Ez a parancs a rendszerkép nevét a következőre állítja: myimage.

A rendszerkép felépítésének ellenőrzéséhez használja a docker images parancsot. A képnek a myimage listában kell megjelennie:

REPOSITORY      TAG                 IMAGE ID            CREATED             SIZE
<none>          <none>              2d5ee0bf3b3b        49 seconds ago      1.43 GB
myimage         latest              739f22498d64        3 minutes ago       1.43 GB

Ha ezen a lemezképen alapuló új tárolót szeretne elindítani, használja a következő parancsot:

docker run -p 6789:5001 --name mycontainer myimage:latest

Ez a parancs a nevű rendszerkép myimagelegújabb verzióját indítja el. A 6789-ös helyi portot annak a tárolónak a portjára képezi le, amelyen a webszolgáltatás figyel (5001). A nevet mycontainer is hozzárendeli a tárolóhoz, ami megkönnyíti a tároló leállítását. A tároló elindítása után elküldheti a kéréseket a következőnek http://localhost:6789/score: .

Példaügyfél a helyi tároló tesztelésére

Az alábbi kód egy olyan Python-ügyfélre mutat példát, amely a tárolóval használható:

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)

Más programozási nyelvek ügyfeleinek például lásd: Webszolgáltatásként üzembe helyezett modellek felhasználása.

A Docker-tároló leállítása

A tároló leállításához használja a következő parancsot egy másik rendszerhéjból vagy parancssorból:

docker kill mycontainer

Következő lépések