Wdrażanie modelu uczenia maszynowego w celu Azure Functions przy użyciu Azure Cache for Redis
W tym artykule wdrożysz model z usługi Azure Machine Learning jako aplikację funkcji w Azure Functions przy użyciu wystąpienia Azure Cache for Redis.
Azure Cache for Redis jest wydajne i skalowalne. W połączeniu z modelem usługi Azure Machine Learning uzyskujesz małe opóźnienia i wysoką przepływność w aplikacji. Kilka scenariuszy, w których pamięć podręczna jest korzystna: podczas wnioskowania danych i rzeczywistych wyników wnioskowania modelu. W obu scenariuszach dane meta lub wyniki są przechowywane w pamięci, co prowadzi do zwiększenia wydajności.
Uwaga
Chociaż zarówno usługa Azure Machine Learning, jak i Azure Functions są ogólnie dostępne, możliwość spakowania modelu z usługi Machine Learning dla usługi Functions jest dostępna w wersji zapoznawczej.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz bezpłatnie.
- Obszar roboczy usługi Azure Machine Learning. Aby uzyskać więcej informacji, zobacz artykuł Tworzenie obszaru roboczego .
- Interfejs wiersza polecenia platformy Azure.
- Wytrenowany model uczenia maszynowego zarejestrowany w obszarze roboczym. Jeśli nie masz modelu, skorzystaj z samouczka Klasyfikacja obrazów: trenowanie modelu do trenowania i rejestrowania go.
Ważne
Fragmenty kodu w tym artykule zakładają, że ustawiono następujące zmienne:
-
ws
— Obszar roboczy usługi Azure Machine Learning. -
model
— Zarejestrowany model, który zostanie wdrożony. -
inference_config
— Konfiguracja wnioskowania dla modelu.
Aby uzyskać więcej informacji na temat ustawiania tych zmiennych, zobacz Wdrażanie modeli za pomocą usługi Azure Machine Learning.
Tworzenie wystąpienia pamięci podręcznej Azure Cache for Redis
Będziesz mieć możliwość wdrożenia modelu uczenia maszynowego w celu Azure Functions z dowolnym wystąpieniem pamięci podręcznej w warstwie Podstawowa, Standardowa lub Premium. Aby utworzyć wystąpienie pamięci podręcznej, wykonaj następujące kroki.
Przejdź do strony głównej Azure Portal lub otwórz menu paska bocznego, a następnie wybierz pozycję Utwórz zasób.
Na stronie Nowy wybierz pozycję Bazy danych, a następnie wybierz pozycję Azure Cache for Redis.
Na stronie Nowa pamięć podręczna Redis Cache skonfiguruj ustawienia nowej pamięci podręcznej.
Ustawienie Sugerowana wartość Opis Nazwa DNS Podaj globalnie unikatową nazwę. Nazwa pamięci podręcznej musi być ciągiem od 1 do 63 znaków. Ciąg może zawierać tylko cyfry, litery lub łączniki. Nazwa musi zaczynać się i kończyć cyfrą lub literą i nie może zawierać kolejnych łączników. Nazwa hosta wystąpienia pamięci podręcznej będzie nazwą <DNS.redis.cache.windows.net>. Subskrypcja Z listy rozwijanej i wybierz swoją subskrypcję. Subskrypcja, w ramach której ma zostać utworzone to nowe wystąpienie Azure Cache for Redis. Grupa zasobów Z listy rozwijanej i wybierz grupę zasobów lub wybierz pozycję Utwórz nową i wprowadź nową nazwę grupy zasobów. Nazwa grupy zasobów, w której ma zostać utworzona pamięć podręczna i inne zasoby. Umieszczając wszystkie zasoby aplikacji w jednej grupie zasobów, można je łatwo zarządzać lub usuwać razem. Lokalizacja Z listy rozwijanej i wybierz lokalizację. Wybierz region w pobliżu innych usług, które będą używać pamięci podręcznej. Warstwa cenowa Z listy rozwijanej i wybierz warstwę cenową. Warstwa cenowa decyduje o rozmiarze, wydajności i funkcjach dostępnych dla pamięci podręcznej. Aby uzyskać więcej informacji, zobacz Omówienie pamięci podręcznej Azure Cache for Redis. Wybierz kartę Sieć lub wybierz przycisk Sieć w dolnej części strony.
Na karcie Sieć wybierz metodę łączności.
Wybierz kartę Dalej: Zaawansowane lub wybierz przycisk Dalej: Zaawansowane w dolnej części strony.
Na karcie Zaawansowane dla wystąpienia podstawowej lub standardowej pamięci podręcznej wybierz przełącznik włącz, jeśli chcesz włączyć port inny niż TLS.
Na karcie Zaawansowane dla wystąpienia pamięci podręcznej w warstwie Premium skonfiguruj ustawienia portów innych niż TLS, klastrowanie i trwałość danych.
Wybierz kartę Dalej: Tagi lub wybierz przycisk Dalej: Tagi w dolnej części strony.
Opcjonalnie na karcie Tagi wprowadź nazwę i wartość, jeśli chcesz sklasyfikować zasób.
Wybierz pozycję Przejrzyj i utwórz. Zostanie wyświetlona karta Przeglądanie i tworzenie, na której platforma Azure weryfikuje konfigurację.
Po pojawieniu się zielonego komunikatu Weryfikacja przekazana pomyślnie wybierz pozycję Utwórz.
Utworzenie pamięci podręcznej zajmuje trochę czasu. Postęp można monitorować na stronie Przegląd Azure Cache for Redis. Gdy stan jest wyświetlany jako Uruchomiono, pamięć podręczna jest gotowa do użycia.
Przygotowanie do wdrożenia
Przed wdrożeniem należy zdefiniować, co jest potrzebne do uruchomienia modelu jako usługi internetowej. Na poniższej liście opisano podstawowe elementy potrzebne do wdrożenia:
Skrypt wejściowy. Ten skrypt akceptuje żądania, ocenia żądanie przy użyciu modelu i zwraca wyniki.
Ważne
Skrypt wejściowy jest specyficzny dla modelu; Musi zrozumieć format danych żądania przychodzącego, format danych oczekiwanych przez model oraz format danych zwracanych do klientów.
Jeśli dane żądania są w formacie, który nie może być używany przez model, skrypt może przekształcić je w akceptowalny format. Może również przekształcić odpowiedź przed zwróceniem jej do klienta.
Domyślnie podczas tworzenia pakietów dla funkcji dane wejściowe są traktowane jako tekst. Jeśli chcesz korzystać z nieprzetworzonych bajtów danych wejściowych (na przykład w przypadku wyzwalaczy obiektów blob), użyj polecenia AMLRequest, aby zaakceptować dane pierwotne.
W przypadku funkcji run upewnij się, że łączy się z punktem końcowym usługi 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
Aby uzyskać więcej informacji na temat skryptu wprowadzania, zobacz Definiowanie kodu oceniania.
- Zależności, takie jak skrypty pomocnika lub pakiety Python/Conda wymagane do uruchomienia skryptu wejściowego lub modelu
Te jednostki są hermetyzowane w konfiguracji wnioskowania. Konfiguracja wnioskowania przywołuje skrypt wejściowy i inne zależności.
Ważne
Podczas tworzenia konfiguracji wnioskowania do użycia z Azure Functions należy użyć obiektu Environment. Pamiętaj, że jeśli definiujesz środowisko niestandardowe, musisz dodać wartość azureml-defaults z wersją >= 1.0.45 jako zależność pip. Ten pakiet zawiera funkcje wymagane do hostowania modelu jako usługi internetowej. W poniższym przykładzie pokazano tworzenie obiektu środowiska i używanie go z konfiguracją wnioskowania:
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)
Aby uzyskać więcej informacji na temat środowisk, zobacz Tworzenie środowisk i zarządzanie nimi na potrzeby trenowania i wdrażania.
Aby uzyskać więcej informacji na temat konfiguracji wnioskowania, zobacz Wdrażanie modeli za pomocą usługi Azure Machine Learning.
Ważne
Podczas wdrażania w usłudze Functions nie trzeba tworzyć konfiguracji wdrożenia.
Instalowanie pakietu SDK w wersji zapoznawczej na potrzeby obsługi usługi Functions
Aby skompilować pakiety dla Azure Functions, należy zainstalować pakiet sdk w wersji zapoznawczej.
pip install azureml-contrib-functions
Tworzenie obrazu
Aby utworzyć obraz platformy Docker wdrożony w Azure Functions, użyj pliku azureml.contrib.functions.package lub określonej funkcji pakietu dla wyzwalacza, którego chcesz użyć. Poniższy fragment kodu pokazuje, jak utworzyć nowy pakiet z wyzwalaczem HTTP na podstawie modelu i konfiguracji wnioskowania:
Uwaga
W fragmencie kodu przyjęto założenie, że model
zawiera zarejestrowany model, który inference_config
zawiera konfigurację środowiska wnioskowania. Aby uzyskać więcej informacji, zobacz Wdrażanie modeli za pomocą usługi 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)
Po show_output=True
wyświetleniu danych wyjściowych procesu kompilacji platformy Docker. Po zakończeniu procesu obraz został utworzony w Azure Container Registry dla obszaru roboczego. Po utworzeniu obrazu zostanie wyświetlona lokalizacja w Azure Container Registry. Zwrócona lokalizacja jest w formacie <acrinstance>.azurecr.io/package@sha256:<imagename>
.
Uwaga
Pakiet dla funkcji obsługuje obecnie wyzwalacze HTTP, wyzwalacze obiektów blob i wyzwalacze usługi Service Bus. Aby uzyskać więcej informacji na temat wyzwalaczy, zobacz Azure Functions powiązania.
Ważne
Zapisz informacje o lokalizacji, ponieważ są one używane podczas wdrażania obrazu.
Wdrażanie obrazu jako aplikacji internetowej
Użyj następującego polecenia, aby pobrać poświadczenia logowania dla Azure Container Registry zawierającego obraz. Zastąp
<myacr>
element wartością zwróconą wcześniej zpackage.location
elementu :az acr credential show --name <myacr>
Dane wyjściowe tego polecenia są podobne do następującego dokumentu JSON:
{ "passwords": [ { "name": "password", "value": "abcdefghijklmmopqrstuv1234567890" }, { "name": "password2", "value": "1234567890abcdefghijklmmopqrstuv" } ], "username": "charlie.roy" }
Zapisz wartość nazwy użytkownika i jednego z haseł.
Jeśli nie masz jeszcze grupy zasobów ani planu usługi App Service do wdrożenia usługi, te polecenia pokazują, jak utworzyć obie te elementy:
az group create --name myresourcegroup --location "West Europe" az appservice plan create --name myplanname --resource-group myresourcegroup --sku B1 --is-linux
W tym przykładzie jest używana podstawowa warstwa cenowa systemu Linux (
--sku B1
).Ważne
Obrazy utworzone przez usługę Azure Machine Learning używają systemu Linux, dlatego należy użyć parametru
--is-linux
.Utwórz konto magazynu do użycia dla magazynu zadań internetowych i pobierz jego parametry połączenia. Zastąp
<webjobStorage>
ciąg nazwą, której chcesz użyć.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
Aby utworzyć aplikację funkcji, użyj następującego polecenia. Zastąp
<app-name>
ciąg nazwą, której chcesz użyć. Zastąp<acrinstance>
wartości i<imagename>
wartościami zwróconymipackage.location
wcześniej. Zastąp<webjobStorage>
ciąg nazwą konta magazynu z poprzedniego kroku:az functionapp create --resource-group myresourcegroup --plan myplanname --name <app-name> --deployment-container-image-name <acrinstance>.azurecr.io/package:<imagename> --storage-account <webjobStorage>
Ważne
W tym momencie aplikacja funkcji została utworzona. Ponieważ jednak nie podano parametrów połączenia dla wyzwalacza HTTP lub poświadczeń do Azure Container Registry zawierającego obraz, aplikacja funkcji nie jest aktywna. W następnych krokach podaj parametry połączenia i informacje dotyczące uwierzytelniania dla rejestru kontenerów.
Aby podać aplikację funkcji przy użyciu poświadczeń wymaganych do uzyskania dostępu do rejestru kontenerów, użyj następującego polecenia. Zastąp
<app-name>
ciąg nazwą aplikacji funkcji. Zastąp<acrinstance>
wartości i<imagetag>
wartościami wywołania interfejsu wiersza polecenia az w poprzednim kroku. Zastąp<username>
element i<password>
informacjami logowania usługi ACR pobranymi wcześniej: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>
To polecenie zwraca informacje podobne do następującego 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" } ]
Na tym etapie aplikacja funkcji rozpoczyna ładowanie obrazu.
Ważne
Załadowanie obrazu może potrwać kilka minut. Postęp można monitorować przy użyciu Azure Portal.
Testowanie Azure Functions wyzwalacza HTTP
Teraz uruchomimy i przetestujemy nasz Azure Functions wyzwalacz HTTP.
- Przejdź do aplikacji funkcji w Azure Portal.
- W obszarze deweloper wybierz pozycję Kod i test.
- Po prawej stronie wybierz kartę Dane wejściowe .
- Wybierz przycisk Uruchom, aby przetestować wyzwalacz HTTP Azure Functions.
Model z usługi Azure Machine Learning został pomyślnie wdrożony jako aplikacja funkcji przy użyciu wystąpienia Azure Cache for Redis. Dowiedz się więcej o Azure Cache for Redis, przechodząc do linków w poniższej sekcji.
Czyszczenie zasobów
Jeśli zamierzasz przejść do kolejnego samouczka, możesz zachować zasoby utworzone w tym przewodniku Szybki start i użyć ich ponownie.
W przeciwnym razie, jeśli skończysz z przewodnikiem Szybki start, możesz usunąć zasoby platformy Azure utworzone w tym przewodniku Szybki start, aby uniknąć opłat.
Ważne
Usunięcie grupy zasobów jest nieodwracalne. Jeśli usuniesz grupę zasobów, wszystkie zawarte w niej zasoby zostaną trwale usunięte. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub grupy zasobów. Jeśli utworzono zasoby do hostowania tego przykładu w istniejącej grupie zasobów zawierającej zasoby, które chcesz zachować, możesz usunąć każdy zasób indywidualnie po lewej stronie zamiast usuwać grupę zasobów.
Aby usunąć grupę zasobów
Zaloguj się do witryny Azure Portal, a następnie wybierz pozycję Grupy zasobów.
W polu Filtruj według nazwy... wpisz nazwę grupy zasobów. Dla grupy zasobów na liście wyników kliknij pozycję ..., a następnie wybierz pozycję Usuń grupę zasobów.
Zobaczysz prośbę o potwierdzenie usunięcia grupy zasobów. Wpisz nazwę grupy zasobów w celu potwierdzenia, a następnie wybierz pozycję Usuń.
Po krótkim czasie grupa zasobów i wszystkie jej zasoby zostaną usunięte.
Następne kroki
- Dowiedz się więcej o Azure Cache for Redis
- Dowiedz się, jak skonfigurować aplikację funkcji w dokumentacji usługi Functions .
- Dokumentacja interfejsu API
- Tworzenie aplikacji w języku Python używającej Azure Cache for Redis