Nasazení modelu strojového učení do Azure Functions pomocí Azure Cache for Redis

V tomto článku nasadíte model z Azure Machine Learning jako aplikaci funkcí v Azure Functions pomocí instance Azure Cache for Redis.

Azure Cache for Redis je výkonná a škálovatelná. Při spárování s modelem Azure Machine Learning získáte v aplikaci nízkou latenci a vysokou propustnost. Několik scénářů, ve kterých je mezipaměť přínosná: při odvozování dat a pro skutečné výsledky odvozování modelu. V obou scénářích se metadata nebo výsledky ukládají do paměti, což vede ke zvýšení výkonu.

Poznámka

I když jsou služby Azure Machine Learning i Azure Functions obecně dostupné, možnost zabalit model ze služby Machine Learning pro funkce je ve verzi Preview.

Požadavky

Důležité

Fragmenty kódu v tomto článku předpokládají, že jste nastavili následující proměnné:

  • ws – Váš pracovní prostor Azure Machine Learning.
  • model – Zaregistrovaný model, který se nasadí.
  • inference_config – Konfigurace odvozování pro model.

Další informace o nastavení těchto proměnných najdete v tématu Nasazení modelů pomocí služby Azure Machine Learning.

Vytvoření instance Azure Cache for Redis

Model strojového učení budete moct nasadit tak, aby Azure Functions s libovolnou instancí mezipaměti Basic, Standard nebo Premium. Chcete-li vytvořit instanci mezipaměti, postupujte podle těchto kroků.

  1. Přejděte na domovskou stránku Azure Portal nebo otevřete nabídku bočního panelu a pak vyberte Vytvořit prostředek.

  2. Na stránce Nový vyberte Databáze a pak vyberte Azure Cache for Redis.

    Vyberte Azure Cache for Redis.

  3. Na stránce Nová mezipaměť Redis nakonfigurujte nastavení nové mezipaměti.

    Nastavení Navrhovaná hodnota Popis
    Název DNS Zadejte globálně jedinečný název. Název mezipaměti musí být řetězec o délce 1 až 63 znaků. Řetězec může obsahovat jenom číslice, písmena nebo spojovníky. Název musí začínat a končit číslicí nebo písmenem a nesmí obsahovat po sobě jdoucí pomlčky. Název hostitele instance mezipaměti bude <NÁZEV> DNS.redis.cache.windows.net.
    Předplatné Rozevírací seznam a vyberte své předplatné. Předplatné, ve kterém chcete vytvořit tuto novou instanci Azure Cache for Redis.
    Skupina prostředků Rozevírací seznam a výběr skupiny prostředků nebo vyberte Vytvořit novou a zadejte název nové skupiny prostředků. Název skupiny prostředků, ve které chcete vytvořit mezipaměť a další prostředky. Když umístíte všechny prostředky aplikace do jedné skupiny prostředků, můžete je snadno spravovat nebo odstraňovat společně.
    Umístění Rozevírací seznam a výběr umístění Vyberte oblast blízko jiných služeb, které budou používat vaši mezipaměť.
    Cenová úroveň Rozevírací seznam a vyberte Cenová úroveň. Cenová úroveň určuje velikost, výkon a funkce, které jsou k dispozici pro danou mezipaměť. Další informace najdete v tématu přehled Azure Cache for Redis.
  4. Vyberte kartu Sítě nebo vyberte tlačítko Sítě v dolní části stránky.

  5. Na kartě Sítě vyberte metodu připojení.

  6. Vyberte kartu Další: Upřesnit nebo vyberte tlačítko Další: Upřesnit v dolní části stránky.

  7. Pokud chcete povolit port bez protokolu TLS, na kartě Upřesnit pro instanci základní nebo standardní mezipaměti vyberte přepínač Povolit.

  8. Na kartě Upřesnit pro instanci mezipaměti úrovně Premium nakonfigurujte nastavení portu bez TLS, clusteringu a trvalosti dat.

  9. Vyberte kartu Další: Značky nebo vyberte tlačítko Další: Značky v dolní části stránky.

  10. Volitelně na kartě Značky zadejte název a hodnotu, pokud chcete prostředek zařadit do kategorií.

  11. Vyberte Zkontrolovat a vytvořit. Přejdete na kartu Zkontrolovat a vytvořit, kde Azure ověří vaši konfiguraci.

  12. Jakmile se zobrazí zelená zpráva Ověření proběhlo úspěšně, vyberte Vytvořit.

Vytvoření mezipaměti chvíli trvá. Průběh můžete sledovat na stránce přehledu Azure Cache for Redis. Když se stav zobrazí jako Spuštěno, mezipaměť je připravená k použití.

Příprava nasazení

Před nasazením musíte definovat, co je potřeba ke spuštění modelu jako webové služby. Následující seznam popisuje základní položky potřebné pro nasazení:

  • Vstupní skript. Tento skript přijímá požadavky, hodnotí požadavek pomocí modelu a vrací výsledky.

    Důležité

    Vstupní skript je specifický pro váš model; Musí rozumět formátu dat příchozích požadavků, formátu dat očekávaných vaším modelem a formátu dat vrácených klientům.

    Pokud jsou data požadavku ve formátu, který váš model nedokáže použít, skript je může transformovat do přijatelného formátu. Může také transformovat odpověď před jejím vrácením klientovi.

    Ve výchozím nastavení je při balení funkcí vstup považován za text. Pokud vás zajímá využití nezpracovaných bajtů vstupu (například pro triggery objektů blob), měli byste k přijetí nezpracovaných dat použít AMLRequest.

U funkce run se ujistěte, že se připojuje ke koncovému bodu Redis.

import json
import numpy as np
import os
import redis
from sklearn.externals import joblib

def init():
    global model
    global azrediscache
    azrediscache = redis.StrictRedis(host='<host_url>', port=6380, password="<access_key>", ssl=True)
    model_path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'sklearn_mnist_model.pkl')
    model = joblib.load(model_path)

@input_schema('data', NumpyParameterType(input_sample))
@output_schema(NumpyParameterType(output_sample))
def run(data):
    try:
        input = azrediscache.get(data)
        result = model.predict(input)
        data = np.array(json.loads(data))
        result = model.predict(data)
        # You can return any data type, as long as it is JSON serializable.
        return result.tolist()
    except Exception as e:
        error = str(e)
        return error

Další informace o zaváděcím skriptu najdete v tématu Definování hodnoticího kódu.

  • Závislosti, jako jsou pomocné skripty nebo balíčky Python/Conda potřebné ke spuštění vstupního skriptu nebo modelu

Tyto entity jsou zapouzdřeny do konfigurace odvození. Odvozená konfigurace odkazuje na vstupní skript a další závislosti.

Důležité

Při vytváření konfigurace odvozování pro použití s Azure Functions musíte použít objekt Prostředí. Upozorňujeme, že pokud definujete vlastní prostředí, musíte přidat azureml-defaults s verzí >= 1.0.45 jako závislostí pip. Tento balíček obsahuje funkce potřebné k hostování modelu jako webové služby. Následující příklad ukazuje vytvoření objektu prostředí a jeho použití s konfigurací odvození:

from azureml.core.environment import Environment
from azureml.core.conda_dependencies import CondaDependencies

# Create an environment and add conda dependencies to it
myenv = Environment(name="myenv")
# Enable Docker based environment
myenv.docker.enabled = True
# Build conda dependencies
myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'],
                                                           pip_packages=['azureml-defaults', 'redis'])
inference_config = InferenceConfig(entry_script="score.py", environment=myenv)

Další informace o prostředích najdete v tématu Vytváření a správa prostředí pro trénování a nasazení.

Další informace o konfiguraci odvozování najdete v tématu Nasazení modelů pomocí služby Azure Machine Learning.

Důležité

Při nasazování do služby Functions nemusíte vytvářet konfiguraci nasazení.

Instalace balíčku SDK Preview pro podporu functions

Pokud chcete sestavovat balíčky pro Azure Functions, musíte nainstalovat balíček SDK Preview.

pip install azureml-contrib-functions

Vytvoření image

Pokud chcete vytvořit image Dockeru nasazenou do Azure Functions, použijte azureml.contrib.functions.package nebo konkrétní funkci balíčku pro trigger, který chcete použít. Následující fragment kódu ukazuje, jak vytvořit nový balíček s triggerem HTTP z konfigurace modelu a odvozování:

Poznámka

Fragment kódu předpokládá, že model obsahuje zaregistrovaný model a který inference_config obsahuje konfiguraci prostředí pro odvozování. Další informace najdete v tématu Nasazení modelů pomocí služby Azure Machine Learning.

from azureml.contrib.functions import package
from azureml.contrib.functions import HTTP_TRIGGER
model_package = package(ws, [model], inference_config, functions_enabled=True, trigger=HTTP_TRIGGER)
model_package.wait_for_creation(show_output=True)
# Display the package location/ACR path
print(model_package.location)

Když show_output=Truese zobrazí výstup procesu sestavení Dockeru. Po dokončení procesu se image vytvoří v Azure Container Registry pro váš pracovní prostor. Po sestavení image se zobrazí umístění ve vašem Azure Container Registry. Vrácené umístění je ve formátu <acrinstance>.azurecr.io/package@sha256:<imagename>.

Poznámka

Balení pro functions v současné době podporuje triggery HTTP, triggery objektů blob a triggery služby Service Bus. Další informace o aktivačních událostech najdete v tématu Azure Functions vazby.

Důležité

Uložte informace o umístění, které se používají při nasazování image.

Nasazení image jako webové aplikace

  1. Pomocí následujícího příkazu získejte přihlašovací údaje pro Azure Container Registry, která obsahuje image. Nahraďte <myacr> hodnotou vrácenou dříve z package.location:

    az acr credential show --name <myacr>
    

    Výstup tohoto příkazu se podobá následujícímu dokumentu JSON:

    {
    "passwords": [
        {
        "name": "password",
        "value": "abcdefghijklmmopqrstuv1234567890"
        },
        {
        "name": "password2",
        "value": "1234567890abcdefghijklmmopqrstuv"
        }
    ],
    "username": "charlie.roy"
    }
    

    Uložte hodnotu pro uživatelské jméno a jedno z hesel.

  2. Pokud ještě nemáte skupinu prostředků nebo plán služby App Service pro nasazení služby, tyto příkazy ukazují, jak vytvořit obojí:

    az group create --name myresourcegroup --location "West Europe"
    az appservice plan create --name myplanname --resource-group myresourcegroup --sku B1 --is-linux
    

    V tomto příkladu se používá cenová úroveň Linuxu Basic (--sku B1).

    Důležité

    Image vytvořené službou Azure Machine Learning používají Linux, takže musíte použít --is-linux parametr .

  3. Vytvořte účet úložiště, který chcete použít pro úložiště webové úlohy, a získejte jeho připojovací řetězec. Nahraďte <webjobStorage> názvem, který chcete použít.

    az storage account create --name <webjobStorage> --location westeurope --resource-group myresourcegroup --sku Standard_LRS
    
    az storage account show-connection-string --resource-group myresourcegroup --name <webJobStorage> --query connectionString --output tsv
    
  4. K vytvoření aplikace funkcí použijte následující příkaz. Nahraďte <app-name> názvem, který chcete použít. Nahraďte <acrinstance> a <imagename> hodnotami vrácenými package.location dříve. Nahraďte <webjobStorage> názvem účtu úložiště z předchozího kroku:

    az functionapp create --resource-group myresourcegroup --plan myplanname --name <app-name> --deployment-container-image-name <acrinstance>.azurecr.io/package:<imagename> --storage-account <webjobStorage>
    

    Důležité

    V tomto okamžiku byla vytvořena aplikace funkcí. Vzhledem k tomu, že jste nezadali připojovací řetězec triggeru HTTP nebo přihlašovací údaje Azure Container Registry obsahující obrázek, není aplikace funkcí aktivní. V dalších krocích zadáte připojovací řetězec a ověřovací informace pro registr kontejneru.

  5. Pokud chcete aplikaci funkcí poskytnout přihlašovací údaje potřebné pro přístup k registru kontejneru, použijte následující příkaz. Nahraďte <app-name> názvem aplikace funkcí. Nahraďte <acrinstance> a <imagetag> hodnotami z volání AZ CLI v předchozím kroku. Nahraďte <username> a <password> přihlašovacími údaji služby ACR, které jste získali dříve:

    az functionapp config container set --name <app-name> --resource-group myresourcegroup --docker-custom-image-name <acrinstance>.azurecr.io/package:<imagetag> --docker-registry-server-url https://<acrinstance>.azurecr.io --docker-registry-server-user <username> --docker-registry-server-password <password>
    

    Tento příkaz vrátí informace podobné následujícímu dokumentu JSON:

    [
    {
        "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
        "slotSetting": false,
        "value": "false"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_URL",
        "slotSetting": false,
        "value": "[server-name].azurecr.io"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_USERNAME",
        "slotSetting": false,
        "value": "[username]"
    },
    {
        "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
        "slotSetting": false,
        "value": null
    },
    {
        "name": "DOCKER_CUSTOM_IMAGE_NAME",
        "value": "DOCKER|[server-name].azurecr.io/package:20190827195524"
    }
    ]
    

V tomto okamžiku aplikace funkcí začne načítat obrázek.

Důležité

Načtení image může trvat několik minut. Průběh můžete monitorovat pomocí Azure Portal.

Testování Azure Functions triggeru HTTP

Teď spustíme a otestujeme trigger HTTP Azure Functions.

  1. V Azure Portal přejděte do své aplikace funkcí.
  2. V části Developer (Vývojář) vyberte Code + Test (Kódování a testování).
  3. Na pravé straně vyberte kartu Vstup .
  4. Výběrem tlačítka Run (Spustit) otestujte Azure Functions trigger HTTP.

Teď jste úspěšně nasadili model ze služby Azure Machine Learning jako aplikaci funkcí pomocí instance Azure Cache for Redis. Další informace o Azure Cache for Redis získáte tak, že přejdete na odkazy v následující části.

Vyčištění prostředků

Pokud budete pokračovat k dalšímu kurzu, můžete prostředky vytvořené v tomto rychlém startu zachovat a znovu je použít.

V opačném případě, pokud jste s rychlým startem skončili, můžete odstranit prostředky Azure, které jste vytvořili v rámci tohoto rychlého startu, abyste se vyhnuli poplatkům.

Důležité

Odstranění skupiny prostředků je nevratné. Při odstranění skupiny prostředků se všechny prostředky, které obsahuje, trvale odstraní. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste vytvořili prostředky pro hostování této ukázky v rámci existující skupiny prostředků, která obsahuje prostředky, které chcete zachovat, můžete odstranit jednotlivé prostředky na levé straně místo odstranění skupiny prostředků.

Odstranění skupiny prostředků

  1. Přihlaste se k portálu Azure Portal a potom vyberte Skupiny prostředků.

  2. Do pole Filtrovat podle názvu zadejte název vaší skupiny prostředků. U skupiny prostředků ve výsledcích hledání vyberte ... a pak vyberte Odstranit skupinu prostředků.

Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Potvrďte odstranění zadáním názvu vaší skupiny prostředků a vyberte Odstranit.

Po chvíli se skupina prostředků včetně všech prostředků, které obsahuje, odstraní.

Další kroky