Samouczek: wdrażanie wstępnie wytrenowanego modelu klasyfikacji obrazów w celu Azure Functions za pomocą narzędzia PyTorch
W tym artykule dowiesz się, jak używać języka Python, PyTorch i Azure Functions do ładowania wstępnie wytrenowanego modelu do klasyfikowania obrazu na podstawie jego zawartości. Ponieważ wszystkie zadania są wykonywane lokalnie i nie są tworzone żadne zasoby platformy Azure w chmurze, ukończenie tego samouczka nie jest kosztowne.
- Zainicjuj środowisko lokalne do tworzenia Azure Functions w języku Python.
- Zaimportuj wstępnie wytrenowany model uczenia maszynowego PyTorch do aplikacji funkcji.
- Utwórz bezserwerowy interfejs API HTTP do klasyfikowania obrazu jako jednej z 1000 klas ImageNet.
- Używanie interfejsu API z poziomu aplikacji internetowej.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz bezpłatne konto.
- Python 3.7.4 lub nowszy. (Język Python 3.8.x i Python 3.6.x są również weryfikowane przy użyciu Azure Functions).
- Podstawowe narzędzia Azure Functions
- Edytor kodu, taki jak program Visual Studio Code
Sprawdzanie wymagań wstępnych
- W terminalu lub oknie polecenia uruchom polecenie
func --version
, aby sprawdzić, czy narzędzia Azure Functions Core Tools są w wersji 2.7.1846 lub nowszej. - Uruchom
python --version
polecenie (Linux/MacOS) lubpy --version
(Windows), aby sprawdzić raporty wersji języka Python w wersji 3.7.x.
Klonowanie repozytorium samouczka
W oknie terminalu lub polecenia sklonuj następujące repozytorium przy użyciu narzędzia Git:
git clone https://github.com/Azure-Samples/functions-python-pytorch-tutorial.git
Przejdź do folderu i sprawdź jego zawartość.
cd functions-python-pytorch-tutorial
- start to folder roboczy dla tego samouczka.
- koniec to końcowy wynik i pełna implementacja dla Twojego odwołania.
- zasoby zawierają model uczenia maszynowego i biblioteki pomocnika.
- fronton to witryna internetowa, która wywołuje aplikację funkcji.
Tworzenie i aktywowanie środowiska wirtualnego języka Python
Przejdź do folderu Start i uruchom następujące polecenia, aby utworzyć i aktywować środowisko wirtualne o nazwie .venv
.
cd start
python -m venv .venv
source .venv/bin/activate
Jeśli język Python nie zainstalował pakietu venv w dystrybucji systemu Linux, uruchom następujące polecenie:
sudo apt-get install python3-venv
Wszystkie kolejne polecenia są uruchamiane w tym aktywowanym środowisku wirtualnym. (Aby zamknąć środowisko wirtualne, uruchom polecenie deactivate
.)
Tworzenie projektu funkcji lokalnych
W Azure Functions projekt funkcji jest kontenerem dla co najmniej jednej pojedynczej funkcji, która odpowiada na określony wyzwalacz. Wszystkie funkcje w projekcie współdzielą te same konfiguracje lokalne i hostujące. W tej sekcji utworzysz projekt funkcji zawierający jedną funkcję kociołową o nazwie classify
, która udostępnia punkt końcowy HTTP. W dalszej sekcji dodasz bardziej szczegółowy kod.
W folderze Start użyj Azure Functions Core Tools, aby zainicjować aplikację funkcji języka Python:
func init --worker-runtime python
Po zainicjowaniu folder startowy zawiera różne pliki dla projektu, w tym pliki konfiguracji o nazwie local.settings.json i host.json. Ponieważ plik local.settings.json może zawierać wpisy tajne pobrane z platformy Azure, plik jest domyślnie wykluczony z kontroli źródła w pliku gitignore .
Porada
Ponieważ projekt funkcji jest powiązany z określonym środowiskiem uruchomieniowym, wszystkie funkcje w projekcie muszą być napisane przy użyciu tego samego języka.
Dodaj funkcję do projektu przy użyciu następującego polecenia, gdzie
--name
argument jest unikatową nazwą funkcji, a--template
argument określa wyzwalacz funkcji.func new
Utwórz podfolder pasujący do nazwy funkcji zawierającej plik kodu odpowiedni dla wybranego języka projektu i plik konfiguracji o nazwie function.json.func new --name classify --template "HTTP trigger"
To polecenie tworzy folder pasujący do nazwy funkcji, klasyfikuj. W tym folderze znajdują się dwa pliki: __init__.py, który zawiera kod funkcji i plik function.json, który opisuje wyzwalacz funkcji oraz powiązania wejściowe i wyjściowe. Aby uzyskać szczegółowe informacje na temat zawartości tych plików, zobacz Model programowania w przewodniku deweloperów języka Python.
Lokalne uruchamianie funkcji
Uruchom funkcję, uruchamiając lokalny host środowiska uruchomieniowego Azure Functions w folderze Start:
func start
Po wyświetleniu
classify
punktu końcowego w danych wyjściowych przejdź do adresu URL .http://localhost:7071/api/classify?name=Azure
Komunikat "Hello Azure!" powinien pojawić się w danych wyjściowych.Użyj klawiszy Ctrl-C , aby zatrzymać hosta.
Importowanie modelu PyTorch i dodawanie kodu pomocniczego
Aby zmodyfikować classify
funkcję w celu klasyfikowania obrazu na podstawie jego zawartości, należy użyć wstępnie wytrenowanego modelu ResNet . Wstępnie wytrenowany model, który pochodzi z PyTorch, klasyfikuje obraz do 1 z 1000 klas ImageNet. Następnie do projektu dodasz kod pomocnika i zależności.
W folderze Start uruchom następujące polecenie, aby skopiować kod przewidywania i etykiety do folderu klasyfikuj .
Sprawdź, czy folder klasyfikuj zawiera pliki o nazwie predict.py i labels.txt. Jeśli nie, sprawdź, czy uruchomiono polecenie w folderze Start .
Otwórz plik start/requirements.txt w edytorze tekstów i dodaj zależności wymagane przez kod pomocnika, które powinny wyglądać następująco:
azure-functions requests -f https://download.pytorch.org/whl/torch_stable.html torch==1.13.0+cpu torchvision==0.14.0+cpu
Porada
Wersje torch i torchvision muszą być zgodne z wartościami wymienionymi w tabeli wersji repozytorium PyTorch vision.
Zapisz requirements.txt, a następnie uruchom następujące polecenie z folderu start , aby zainstalować zależności.
pip install --no-cache-dir -r requirements.txt
Instalacja może potrwać kilka minut. W tym czasie można kontynuować modyfikowanie funkcji w następnej sekcji.
Porada
W systemie Windows może wystąpić błąd "Nie można zainstalować pakietów z powodu błędu EnvironmentError: [Errno 2] Brak takiego pliku lub katalogu:" po którym następuje długa nazwa ścieżki do pliku takiego jak sharded_mutable_dense_hashtable.cpython-37.pyc. Zazwyczaj ten błąd występuje, ponieważ głębokość ścieżki folderu staje się za długa. W takim przypadku ustaw klucz
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled
rejestru, aby1
włączyć długie ścieżki. Alternatywnie sprawdź, gdzie jest zainstalowany interpreter języka Python. Jeśli ta lokalizacja ma długą ścieżkę, spróbuj zainstalować ponownie w folderze z krótszą ścieżką.
Aktualizowanie funkcji w celu uruchamiania przewidywań
Otwórz plik classify/__init__.py w edytorze tekstów i dodaj następujące wiersze po istniejących
import
instrukcjach, aby zaimportować standardową bibliotekę JSON i pomocników przewidywania :import logging import azure.functions as func import json # Import helper script from .predict import predict_image_from_url
Zastąp całą zawartość
main
funkcji następującym kodem: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)
Ta funkcja odbiera adres URL obrazu w parametrze ciągu zapytania o nazwie
img
. Następnie wywołuje zpredict_image_from_url
biblioteki pomocnika pobieranie i klasyfikowanie obrazu przy użyciu modelu PyTorch. Następnie funkcja zwraca odpowiedź HTTP z wynikami.Ważne
Ponieważ ten punkt końcowy HTTP jest wywoływany przez stronę internetową hostowaną w innej domenie, odpowiedź zawiera
Access-Control-Allow-Origin
nagłówek spełniający wymagania dotyczące współużytkowania zasobów między źródłami (CORS) przeglądarki.W aplikacji produkcyjnej przejdź
*
do określonego źródła strony internetowej w celu zwiększenia bezpieczeństwa.Zapisz zmiany, a następnie przy założeniu, że zależności zakończyły instalację, uruchom ponownie hosta funkcji lokalnej za pomocą polecenia
func start
. Pamiętaj, aby uruchomić hosta w folderze start z aktywowanym środowiskiem wirtualnym. W przeciwnym razie host zostanie uruchomiony, ale podczas wywoływania funkcji zostaną wyświetlone błędy.func start
W przeglądarce otwórz następujący adres URL, aby wywołać funkcję z adresem URL obrazu Bernese Mountain Dog i potwierdzić, że zwrócony kod JSON klasyfikuje obraz jako Bernese Mountain Dog.
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
Zachowaj działanie hosta, ponieważ używasz go w następnym kroku.
Uruchamianie frontonu lokalnej aplikacji internetowej w celu przetestowania funkcji
Aby przetestować wywoływanie punktu końcowego funkcji z innej aplikacji internetowej, istnieje prosta aplikacja w folderze frontonu repozytorium.
Otwórz nowy terminal lub wiersz polecenia i aktywuj środowisko wirtualne (zgodnie z wcześniejszym opisem w obszarze Tworzenie i aktywowanie środowiska wirtualnego języka Python).
Przejdź do folderu frontonu repozytorium.
Uruchom serwer HTTP przy użyciu języka Python:
W przeglądarce przejdź do
localhost:8000
adresu , a następnie wprowadź jeden z następujących adresów URL zdjęć w polu tekstowym lub użyj adresu URL dowolnego publicznie dostępnego obrazu.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
Wybierz pozycję Prześlij, aby wywołać punkt końcowy funkcji, aby sklasyfikować obraz.
Jeśli przeglądarka zgłosi błąd podczas przesyłania adresu URL obrazu, sprawdź terminal, w którym jest uruchomiona aplikacja funkcji. Jeśli zostanie wyświetlony błąd taki jak "Nie znaleziono modułu PIL", być może aplikacja funkcji została uruchomiona w folderze start bez wcześniejszego aktywowania utworzonego wcześniej środowiska wirtualnego. Jeśli nadal występują błędy, uruchom ponownie przy
pip install -r requirements.txt
użyciu aktywowanego środowiska wirtualnego i poszukaj błędów.
Czyszczenie zasobów
Ponieważ cały ten samouczek działa lokalnie na maszynie, nie ma żadnych zasobów ani usług platformy Azure do wyczyszczenia.
Następne kroki
W tym samouczku przedstawiono sposób tworzenia i dostosowywania punktu końcowego interfejsu API PROTOKOŁU HTTP przy użyciu Azure Functions do klasyfikowania obrazów przy użyciu modelu PyTorch. Przedstawiono również sposób wywoływania interfejsu API z poziomu aplikacji internetowej. Techniki przedstawione w tym samouczku umożliwiają tworzenie interfejsów API o dowolnej złożoności, a wszystko to podczas uruchamiania w modelu obliczeniowym bezserwerowym udostępnianym przez Azure Functions.
Zobacz też: