Oktatóanyag: Előre betanított képbesorolási modell üzembe helyezése a PyTorch Azure Functions

Ebből a cikkből megtudhatja, hogyan használhatja a Pythont, a PyTorchot és a Azure Functions egy előre betanított modell betöltésére a képek tartalma alapján történő besorolásához. Mivel minden helyi munkát elvégez, és nem hoz létre Azure-erőforrásokat a felhőben, nem kell elvégeznie ezt az oktatóanyagot.

  • Helyi környezet inicializálása a pythonos Azure Functions fejlesztéséhez.
  • Előre betanított PyTorch-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épek 1000 ImageNet-osztály egyikének besorolásához.
  • Az API használata webalkalmazásból.

Előfeltételek

Előfeltételek ellenőrzése

  1. A terminálban vagy a 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.
  2. Futtassa python --version a (Linux/MacOS) vagy py --version a (Windows) parancsot a Python-verziójelentések 3.7.x verziójának ellenőrzéséhez.

Az oktatóanyag-adattár klónozása

  1. Egy terminál- vagy parancsablakban klónozza a következő adattárat a Git használatával:

    git clone https://github.com/Azure-Samples/functions-python-pytorch-tutorial.git
    
  2. Lépjen a mappába, és vizsgálja meg annak tartalmát.

    cd functions-python-pytorch-tutorial
    
    • A start az oktatóanyag munkamappája.
    • az end 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.

Virtuális Python-környezet létrehozása és aktiválása

Lépjen a start mappába, és futtassa a következő parancsokat egy nevű .venvvirtuális környezet létrehozásához és aktiválásához.

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

Az összes további parancsot ebben az aktivált virtuális környezetben futtatja. (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 vagy több különálló függvény tárolója, 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ű classify sablonfüggvényt tartalmaz, amely EGY HTTP-végpontot biztosít. Egy későbbi szakaszban konkrétabb kódot adhat hozzá.

  1. 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 különböző fájlokat tartalmaz a projekthez, beleértve a local.settings.json és 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 fájl alapértelmezés szerint ki van zárva a .gitignore fájlból a verziókö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 megírni.

  2. Adjon hozzá egy függvényt a projekthez a következő 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 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 azokat. Ebben a mappában két fájl található: __init__.py, amely tartalmazza a függvénykódot é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 a Python fejlesztői útmutatójának programozási modelljét .

A függvény helyi futtatása

  1. 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
    
  2. Ha a végpont megjelenik classify a kimenetben, lépjen a következő URL-címre: http://localhost:7071/api/classify?name=Azure. A kimenetben a "Hello Azure!" üzenetnek kell megjelennie.

  3. Állítsa le a gazdagépet a CtrlCbillentyűkombinációval-.

A PyTorch-modell importálása és segédkód hozzáadása

Ha módosítani szeretné a függvényt classify , hogy a rendszerképet a tartalma alapján osztályozza, egy előre betanított ResNet-modellt használ. A PyTorchból származó előre betanított modell egy képet 1000 ImageNet osztályból 1 osztályba sorol be. Ezután hozzáadhat néhány segédkódot és függőséget a projekthez.

  1. A start mappában futtassa a következő parancsot az előrejelzési kód és a címkék besorolási mappába másolásához.

    cp ../resources/predict.py classify
    cp ../resources/labels.txt classify
    
  2. Ellenőrizze, hogy a besorolási mappa tartalmaz-e predict.py és labels.txtnevű fájlokat. Ha nem, ellenőrizze, hogy futtatta-e a parancsot a start mappában.

  3. Nyissa meg a start/requirements.txt egy szövegszerkesztőben, és adja hozzá a segédkódhoz szükséges függőségeket, amelyek a következőképpen néznek ki:

    azure-functions
    requests
    -f https://download.pytorch.org/whl/torch_stable.html
    torch==1.13.0+cpu
    torchvision==0.14.0+cpu
    

    Tipp

    A fáklya és a torchvision verzióinak meg kell egyeznie a PyTorch vision-adattár verziótáblájában felsorolt értékekkel.

  4. Mentse requirements.txt, majd futtassa a következő parancsot a start mappából a függőségek telepítéséhez.

    pip install --no-cache-dir -r requirements.txt
    

A telepítés eltarthat néhány percig, amíg a függvényt a következő szakaszban módosíthatja.

Tipp

Windows rendszeren a következő hibaüzenet jelenhet meg: "Nem telepíthet csomagokat egy EnvironmentError miatt: [Errno 2] Nincs ilyen fájl vagy könyvtár:" hibaüzenet, amelyet egy fájl hosszú elérési útja követ, 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 a beállításkulcsot HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled1 a hosszú elérési utak engedélyezéséhez. 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álja meg újratelepíteni egy rövidebb elérési utat tartalmazó mappában.

A függvény frissítése előrejelzések futtatásához

  1. 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 standard 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
    
  2. 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 imgkap kép URL-címet. Ezután a segédtárból kéri predict_image_from_url a rendszerkép letöltését és besorolását a PyTorch-modell használatával. 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ő eltérő eredetű erőforrás-megosztási (CORS) követelményeinek.

    Az éles alkalmazásokban váltson * a weblap adott forrására a fokozott biztonság érdekében.

  3. 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 hibaüzenetek jelennek meg a függvény meghívásakor.

    func start
    
  4. Egy böngészőben nyissa meg a következő URL-címet, hogy meghívja a függvényt egy Bernese Mountain Dog-kép URL-címével, és ellenőrizze, hogy a visszaadott JSON berni hegyi kutyaként sorolja-e be a képet.

    http://localhost:7071/api/classify?img=https://raw.githubusercontent.com/Azure-Samples/functions-python-pytorch-tutorial/master/resources/assets/Bernese-Mountain-Dog-Temperament-long.jpg
    
  5. 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 van egy egyszerű alkalmazás az adattár előtérbeli mappájában.

  1. Nyisson meg egy új terminált vagy parancssort, és aktiválja a virtuális környezetet (a pythonos virtuális környezet létrehozása és aktiválása című szakaszban leírtak szerint).

  2. Nyissa meg az adattár előtérbeli mappáját.

  3. HTTP-kiszolgáló indítása a Pythonnal:

    python -m http.server
    
  4. Egy böngészőben lépjen a lapra localhost:8000, majd írja be a következő fényképES 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-pytorch-tutorial/master/resources/assets/Bernese-Mountain-Dog-Temperament-long.jpg
    • https://github.com/Azure-Samples/functions-python-pytorch-tutorial/blob/master/resources/assets/bald-eagle.jpg?raw=true
    • https://raw.githubusercontent.com/Azure-Samples/functions-python-pytorch-tutorial/master/resources/assets/penguin.jpg
  5. Válassza a Küldés lehetőséget a függvényvégpont meghívásához a rendszerkép besorolásához.

    Képernyőkép a befejezett projektről

    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örnyezettel, és keressen hibákat.

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 PyTorch-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: