Oktatóanyag: Gépi tanulási modellek alkalmazása Azure Functions Pythonnal és TensorFlow-val
Ebből a cikkből megtudhatja, hogyan osztályozhat egy képet a tartalma alapján a Python, a TensorFlow és a Azure Functions gépi tanulási modellel. Mivel minden munkát helyileg végez, és nem hoz létre Azure-erőforrásokat a felhőben, az oktatóanyag elvégzése nem jár költséggel.
- Helyi környezet inicializálása a pythonos Azure Functions fejlesztéséhez.
- Egyéni TensorFlow gépi tanulási modell importálása függvényalkalmazásba.
- Hozzon létre egy kiszolgáló nélküli HTTP API-t a rendszerkép kutya vagy macska tartalmazóként való besorolásához.
- Az API használata webalkalmazásból.
Előfeltételek
- Egy Azure-fiók, aktív előfizetéssel. Hozzon létre ingyenes fiókot.
- Python 3.7.4. (A Python 3.7.4-et és a Python 3.6.x-et Azure Functions ellenőrzik; A Python 3.8 és újabb verziói még nem támogatottak.)
- A Azure Functions Core Tools
- Kódszerkesztő, például Visual Studio Code
Előfeltételek ellenőrzése
- Egy terminál vagy parancsablakban futtassa a parancsot
func --version
annak ellenőrzéséhez, hogy a Azure Functions Core Tools 2.7.1846-os vagy újabb verziójú-e. - Futtassa
python --version
a (Linux/MacOS) vagypy --version
a (Windows) parancsot a Python 3.7.x-es verziójelentéseinek ellenőrzéséhez.
Az oktatóanyag-adattár klónozása
Terminálban vagy parancsablakban klónozza a következő adattárat a Git használatával:
git clone https://github.com/Azure-Samples/functions-python-tensorflow-tutorial.git
Lépjen a mappába, és vizsgálja meg annak tartalmát.
cd functions-python-tensorflow-tutorial
- A start az oktatóanyag munkamappája.
- A befejezés a referencia végső eredménye és teljes implementációja.
- az erőforrások tartalmazzák a gépi tanulási modellt és a segédkódtárakat.
- A frontend egy olyan webhely, amely meghívja a függvényalkalmazást.
Python virtuális környezet létrehozása és aktiválása
Lépjen a start mappába, és futtassa az alábbi parancsokat egy nevű .venv
virtuális környezet létrehozásához és aktiválásához. Mindenképpen használja a Python 3.7-et, amelyet a Azure Functions támogat.
cd start
python -m venv .venv
source .venv/bin/activate
Ha a Python nem telepítette a venv-csomagot a Linux-disztribúcióra, futtassa a következő parancsot:
sudo apt-get install python3-venv
Ebben az aktivált virtuális környezetben futtatja az összes további parancsot. (A virtuális környezetből való kilépéshez futtassa a következőt deactivate
: .)
Helyi függvényprojekt létrehozása
A Azure Functions függvényprojekt egy tároló egy vagy több egyedi függvény számára, amelyek mindegyike egy adott eseményindítóra válaszol. A projekt összes függvénye ugyanazokkal a helyi és üzemeltetési konfigurációkkal rendelkezik. Ebben a szakaszban egy függvényprojektet hoz létre, amely egyetlen nevű sablonfüggvényt classify
tartalmaz, amely EGY HTTP-végpontot biztosít. Egy későbbi szakaszban konkrétabb kódot adhat hozzá.
A start mappában a Azure Functions Core Tools használatával inicializáljon egy Python-függvényalkalmazást:
func init --worker-runtime python
Az inicializálás után a start mappa a projekt különböző fájljait tartalmazza, beleértve a local.settings.json és a host.json nevű konfigurációs fájlokat. Mivel a local.settings.json tartalmazhat az Azure-ból letöltött titkos kódokat, a . gitignore fájl alapértelmezés szerint kizárja a forráskövetésből.
Tipp
Mivel egy függvényprojekt egy adott futtatókörnyezethez van kötve, a projekt összes függvényét ugyanazzal a nyelvvel kell írni.
Adjon hozzá egy függvényt a projekthez az alábbi paranccsal, ahol az
--name
argumentum a függvény egyedi neve, az--template
argumentum pedig a függvény eseményindítóját adja meg.func new
hozzon létre egy olyan almappát, amely megfelel a függvény nevének, amely a projekt választott nyelvének megfelelő kódfájlt és egy function.json nevű konfigurációs fájlt tartalmaz.func new --name classify --template "HTTP trigger"
Ez a parancs létrehoz egy mappát, amely megfelel a függvény nevének, és osztályozza. Ebben a mappában két fájl található: __init__.py, amely tartalmazza a függvény kódját és a function.json fájlt, amely leírja a függvény eseményindítóját, valamint annak bemeneti és kimeneti kötéseit. A fájlok tartalmával kapcsolatos részletekért lásd: Programozási modell a Python fejlesztői útmutatójában.
A függvény helyi futtatása
Indítsa el a függvényt a helyi Azure Functions futtatókörnyezeti gazdagép elindításával a start mappában:
func start
Ha a végpont megjelenik a
classify
kimenetben, keresse meg a következő URL-címet:http://localhost:7071/api/classify?name=Azure
. A kimenetben a "Hello Azure!" üzenetnek kell megjelennie.Állítsa le a gazdagépet a CtrlCbillentyűkombinációval-.
A TensorFlow-modell importálása és segédkód hozzáadása
Ha módosítani szeretné a függvényt, classify
hogy a tartalma alapján osztályozza a rendszerképet, egy előre elkészített TensorFlow-modellt használ, amelyet az Azure Custom Vision Service-be betanítottak és exportáltak. A modell, amely a korábban klónozott minta resources mappájában található, osztályozza a képet attól függően, hogy tartalmaz-e kutyát vagy macskát. Ezután hozzáadhat néhány segédkódot és függőséget a projekthez.
Ha saját modellt szeretne létrehozni a Custom Vision szolgáltatás ingyenes szintjével, kövesse a mintaprojekt-adattár utasításait.
Tipp
Ha a TensorFlow-modellt a függvényalkalmazástól függetlenül szeretné üzemeltetni, a modellt tartalmazó fájlmegosztást csatlakoztathatja a Linux-függvényalkalmazáshoz. További információ: Fájlmegosztás csatlakoztatása Python-függvényalkalmazáshoz az Azure CLI használatával.
A start mappában futtassa a következő parancsot a modellfájlok besorolási mappába való másolásához. Ügyeljen arra, hogy szerepeljen
\*
a parancsban.cp ../resources/model/* classify
Ellenőrizze, hogy az osztályozási mappa tartalmazza-e a model.pb és labels.txtnevű fájlokat. Ha nem, ellenőrizze, hogy futtatta-e a parancsot a start mappában.
A start mappában futtassa a következő parancsot egy segédkódot tartalmazó fájl másolásához az osztályozási mappába:
cp ../resources/predict.py classify
Ellenőrizze, hogy az osztályozási mappa tartalmaz-e egy predict.py nevű fájlt.
Nyissa meg a start/requirements.txt egy szövegszerkesztőben, és adja hozzá a segédkódhoz szükséges alábbi függőségeket:
tensorflow==1.14 Pillow requests
Mentse requirements.txt.
A függőségek telepítéséhez futtassa a következő parancsot a start mappában. A telepítés eltarthat néhány percig, amíg a függvényt a következő szakaszban módosíthatja.
pip install --no-cache-dir -r requirements.txt
Windows rendszeren a következő hibaüzenet jelenhet meg: "A csomagok nem telepíthetők egy EnvironmentError miatt: [Errno 2] Nincs ilyen fájl vagy könyvtár:", majd egy fájl hosszú elérési útja, például sharded_mutable_dense_hashtable.cpython-37.pyc. Ez a hiba általában azért fordul elő, mert a mappa elérési útja túl hosszú lesz. Ebben az esetben állítsa be a beállításkulcsot
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled
a hosszú elérési utak engedélyezéséhez1
. Másik lehetőségként ellenőrizze, hogy a Python-értelmező hol van telepítve. Ha ez a hely hosszú elérési úttal rendelkezik, próbálkozzon újratelepítéssel egy rövidebb elérési úttal rendelkező mappában.
Tipp
Amikor predict.py hívja meg az első előrejelzést, egy nevű _initialize
függvény betölti a TensorFlow modellt a lemezről, és globális változókban gyorsítótárazza. Ez a gyorsítótárazás felgyorsítja a későbbi előrejelzéseket. A globális változók használatáról további információt a Azure Functions Python fejlesztői útmutatójában talál.
A függvény frissítése előrejelzések futtatásához
Nyissa meg a classify/__init__.py fájlt egy szövegszerkesztőben, és adja hozzá a következő sorokat a meglévő
import
utasítások után a szabványos JSON-kódtár és az előrejelzési segédek importálásához:import logging import azure.functions as func import json # Import helper script from .predict import predict_image_from_url
Cserélje le a
main
függvény teljes tartalmát a következő kódra:def main(req: func.HttpRequest) -> func.HttpResponse: image_url = req.params.get('img') logging.info('Image URL received: ' + image_url) results = predict_image_from_url(image_url) headers = { "Content-type": "application/json", "Access-Control-Allow-Origin": "*" } return func.HttpResponse(json.dumps(results), headers = headers)
Ez a függvény egy nevű lekérdezési sztringparaméterben kap kép URL-címet
img
. Ezután a segédtárból kéripredict_image_from_url
a rendszerkép letöltését és besorolását a TensorFlow-modellel. A függvény ezután egy HTTP-választ ad vissza az eredményekkel.Fontos
Mivel ezt a HTTP-végpontot egy másik tartományban üzemeltetett weblap hívja meg, a válasz tartalmaz egy
Access-Control-Allow-Origin
fejlécet, amely megfelel a böngésző forrásközi erőforrás-megosztási (CORS) követelményeinek.Egy éles alkalmazásban váltson
*
a weblap adott forrására a hozzáadott biztonság érdekében.Mentse a módosításokat, majd feltételezve, hogy a függőségek telepítése befejeződött, indítsa újra a helyi függvény gazdagépét a következővel
func start
: . Győződjön meg arról, hogy a gazdagépet a start mappában futtatja, és a virtuális környezet aktiválva van. Ellenkező esetben a gazdagép elindul, de a függvény meghívásakor hibák jelennek meg.func start
A böngészőben nyissa meg a következő URL-címet, hogy meghívja a függvényt egy macskakép URL-címével, és ellenőrizze, hogy a visszaadott JSON macskaként sorolja-e be a képet.
http://localhost:7071/api/classify?img=https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.png
Futtassa a gazdagépet, mert a következő lépésben használja.
Futtassa a helyi webalkalmazás előtérrendszerét a függvény teszteléséhez
A függvényvégpont egy másik webalkalmazásból való meghívásának teszteléséhez egy egyszerű alkalmazás található az adattár előtérmappájában .
Nyisson meg egy új terminált vagy parancssort, és aktiválja a virtuális környezetet (a korábban ismertetett módon a Python virtuális környezet létrehozása és aktiválása szakaszban).
Nyissa meg az adattár előtérmappáját .
HTTP-kiszolgáló indítása a Pythonnal:
python -m http.server
Egy böngészőben lépjen a
localhost:8000
elemre, majd adja meg az alábbi fénykép URL-címek egyikét a szövegmezőbe, vagy használja a nyilvánosan elérhető képek URL-címét.https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat1.png
https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/cat2.png
https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog1.png
https://raw.githubusercontent.com/Azure-Samples/functions-python-tensorflow-tutorial/master/resources/assets/samples/dog2.png
Válassza a Küldés lehetőséget a függvényvégpont meghívásához a kép besorolásához.
Ha a böngésző hibát jelez a kép URL-címének elküldésekor, ellenőrizze azt a terminált, amelyen a függvényalkalmazást futtatja. Ha a "Nem található modul "PIL" hibaüzenet jelenik meg, előfordulhat, hogy a függvényalkalmazást a start mappában indította el anélkül, hogy először aktiválta volna a korábban létrehozott virtuális környezetet. Ha továbbra is hibákat lát, futtassa
pip install -r requirements.txt
újra az aktivált virtuális környezetet, és keressen hibákat.
Megjegyzés
A modell mindig macskának vagy kutyának sorolja be a kép tartalmát, függetlenül attól, hogy a kép tartalmazza-e azokat, alapértelmezés szerint kutya. A tigrisek és párducok képei, például általában macskaként osztályozhatók, de az elefántok, sárgarépa vagy repülőgépek képei kutyaként osztályozhatók.
Az erőforrások eltávolítása
Mivel az oktatóanyag teljes egésze helyileg fut a gépen, nincs törölhető Azure-erőforrás vagy szolgáltatás.
Következő lépések
Ebben az oktatóanyagban megtanulta, hogyan hozhat létre és szabhat testre egy HTTP API-végpontot Azure Functions a képek TensorFlow-modellel való besorolásához. Azt is megtanulta, hogyan hívhatja meg az API-t egy webalkalmazásból. Az oktatóanyagban ismertetett technikákkal bármilyen összetettségű API-kat hozhat létre, mindezt a Azure Functions által biztosított kiszolgáló nélküli számítási modellen való futtatás során.
Lásd még: