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 myimage
legú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:
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ékekrepackage.get_container_registry()
.docker login <address> -u <username> -p <password>
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 myimage
legú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
- Sikertelen üzembe helyezés hibaelhárítása
- Üzembe helyezés az Azure Kubernetes Service-ben
- Ügyfélalkalmazások létrehozása webszolgáltatások használatához
- Webszolgáltatás frissítése
- Modell üzembe helyezése egyéni Docker-rendszerkép használatával
- TLS használata webszolgáltatás védelméhez az Azure Machine Learning szolgáltatás segítségével
- Azure Machine Learning-modellek monitorozása az Application Insights használatával
- Adatok gyűjtése éles modellekhez
- Eseményriasztások és eseményindítók létrehozása modelltelepítésekhez