Sdílet prostřednictvím


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

V tomto článku nasadíte model ze služby Azure Machine Learning jako aplikace funkcí ve službě 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 ve své aplikaci nízkou latenci a vysokou propustnost. Několik scénářů, kdy je mezipaměť výhodná: při odvozování dat a výsledků odvozování modelu. V obou scénářích jsou metadata nebo výsledky uloženy v paměti, což vede ke zvýšení výkonu.

Poznámka:

I když jsou Azure Machine Learning i Azure Functions obecně dostupné, možnost zabalit model ze služby Machine Learning pro functions 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 – Registrovaný model, který se nasadí.
  • inference_config – Konfigurace odvozování modelu.

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 do Azure Functions s libovolnou instancí mezipaměti Basic, Standard nebo Premium. Pokud chcete vytvořit instanci mezipaměti, postupujte takto.

  1. Přejděte na domovskou stránku webu 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 New Redis Cache nakonfigurujte nastavení pro novou mezipaměť.

    Nastavení Navrhovaná hodnota Popis
    Název DNS Zadejte globálně jedinečný název. Název mezipaměti musí být řetězec mezi 1 a 63 znaky. Řetězec může obsahovat pouze číslice, písmena nebo pomlčky. Název musí začínat a končit číslicí nebo písmenem a nesmí obsahovat po sobě jdoucí pomlčky. Název hostitele vaší 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 se má tato nová instance Azure Cache for Redis vytvořit.
    Skupina prostředků Rozevírací seznam a vyberte skupinu prostředků nebo vyberte Vytvořit novou a zadejte nový název 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ě.
    Místo Rozevírací seznam a výběr umístění Vyberte oblast poblíž jiných služeb, které budou používat vaši mezipaměť.
    Cenová úroveň Rozevírací seznam a vyberte cenovou ú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 služby 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. Na kartě Upřesnit pro instanci základní nebo standardní mezipaměti vyberte přepínač povolení, pokud chcete povolit port bez protokolu TLS.

  8. Na kartě Upřesnit pro instanci mezipaměti Premium nakonfigurujte nastavení pro port, clustering a trvalost dat bez protokolu TLS.

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

  10. Volitelně můžete na kartě Značky zadat 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 o úspěšném ověření, vyberte Vytvořit.

Vytvoření mezipaměti chvíli trvá. Průběh můžete sledovat na stránce Přehled služby Azure Cache for Redis. Když se stav zobrazí jako Spuštěno, je mezipaměť 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, vyhodnotuje požadavek pomocí modelu a vrací výsledky.

    Důležité

    Vstupní skript je specifický pro váš model; Musí rozumět formátu příchozích dat 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 nepoužuje, skript je může transformovat do přijatelného formátu. Odpověď může také transformovat před vrácením klientovi.

    Při balení funkcí se vstup ve výchozím nastavení považuje za text. Pokud vás zajímají nezpracované bajty vstupu (například triggery objektů blob), měli byste k přijetí nezpracovaných dat použít AMLRequest.

U funkce spuštění 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 vstupním skriptu najdete v tématu Definování kódu bodování.

  • 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 odvozování. Odvozená konfigurace odkazuje na vstupní skript a další závislosti.

Důležité

Při vytváření konfigurace odvozování pro použití se službou Azure Functions musíte použít objekt prostředí . Upozorňujeme, že pokud definujete vlastní prostředí, musíte přidat výchozí hodnoty azureml 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í odvozování:

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 služby Functions

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

pip install azureml-contrib-functions

Vytvoření image

K vytvoření image Dockeru nasazené 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 modelu a odvozovat konfiguraci:

Poznámka:

Fragment kódu předpokládá, že model obsahuje registrovaný model a obsahuje inference_config konfiguraci pro odvozovací prostředí. 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ří ve službě Azure Container Registry pro váš pracovní prostor. Po sestavení image se zobrazí umístění ve službě 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 triggerech najdete v tématu Vazby azure Functions.

Důležité

Uložte informace o umístění, protože 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 ke službě 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 je podobný 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ň Basic (--sku B1) linuxu.

    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ý se použije 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> hodnoty <imagename> 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 tuto chvíli byla vytvořena aplikace funkcí. Protože jste ale nezadali připojovací řetězec pro trigger HTTP nebo přihlašovací údaje do služby Azure Container Registry, která obsahuje image, aplikace funkcí není 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> hodnoty <imagetag> z volání AZ CLI v předchozím kroku. Nahraďte <username> přihlašovací <password> údaje ACR načtenými 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 začne aplikace funkcí načítat obrázek.

Důležité

Než se image načte, může to trvat několik minut. Průběh můžete monitorovat pomocí webu Azure Portal.

Testování triggeru HTTP služby Azure Functions

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

  1. Přejděte do aplikace funkcí na webu Azure Portal.
  2. V části Vývojář vyberte Kód + Test.
  3. Na pravé straně vyberte kartu Vstup .
  4. Výběrem tlačítka Spustit otestujte trigger HTTP služby Azure Functions.

Teď jste úspěšně nasadili model ze služby Azure Machine Learning jako aplikace funkcí pomocí instance Azure Cache for Redis. Další informace o Službě Azure Cache for Redis najdete na odkazech 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.

Pokud jste dokončili rychlý start, můžete odstranit prostředky Azure, které jste vytvořili v tomto rychlém 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 existující skupině prostředků obsahující prostředky, které chcete zachovat, můžete všechny prostředky odstranit jednotlivě nalevo 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