"J'ai fait un modèle de ML et je veux en faire un service Web ..." "Si je le fais, c'est le cloud, mais je ne sais pas comment le faire ..." C'est un mémo quand je pensais avoir même déployé le modèle réalisé avec Azure.
Quant à Azure, je n'ai trouvé aucun article en japonais par rapport à AWS, j'ai donc eu du mal.
Si vous souhaitez faire la même chose, veuillez vous y référer.
Cette fois, nous déploierons le cGAN créé dans l'article "CGAN (GAN conditionnel) pour générer MNIST (KMNIST)".
Apparemment, Azure ne prend pas en charge python3.7, je l'ai donc recréé avec python3.6.
cloudpickle est un module de décapage d'un modèle créé avec PyTorch. L'utilisation est presque la même qu'un cornichon normal.
Utilisez le fichier .pkl </ code> créé avec le code près de la fin de ce qui précède tel quel.
Je veux l'essayer, alors j'utiliserai ici le module de requêtes python sur le notebook jupyter.
Créez un groupe de ressources en sélectionnant «Groupe de ressources» -> «Ajouter» sur l'écran d'accueil du portail Azure. Vous pouvez utiliser le groupe de ressources d'origine pour les étapes suivantes. Par conséquent, si vous disposez d'un groupe existant, vous n'avez pas à le créer.
Ici, créez-le en tant que "** FaaS-resource " comme nom du groupe de ressources. La région peut être n'importe quoi, mais laissez-la comme " Est du Japon **".
Nous utiliserons les fonctionnalités d'Azure Machine Learning (AzureML), nous allons donc créer des ressources pour AzureML. À partir de la page d'accueil du portail Azure, saisissez «Machine Learning» dans «Create Resource» et il devrait sortir. Créez avec "Créer". Ensuite, un écran comme celui-ci apparaîtra. Entrez le nom de l'espace de travail (n'importe quel nom convient), sélectionnez l'abonnement et sélectionnez celui que vous avez créé précédemment comme groupe de ressources. L'édition de l'espace de travail est OK avec "** Basic **".
Après avoir créé AzureML, accédez à Azure Machine Learning Studio à partir de «Essayer Azure Machine Learning Studio» sur l'écran de l'espace de travail.
L'écran devrait ressembler à ceci.
Cliquez sur "Modèle" dans "Actifs" sur la gauche pour enregistrer le modèle ML créé localement.
Lorsque vous cliquez sur «Enregistrer le modèle», un écran de saisie du contour du modèle apparaîtra, alors saisissez le nom et la description (non obligatoire).
Cette fois, nous utiliserons le modèle créé avec PyTorch, alors sélectionnez "** PyTorch ", entrez la version du framework sous la forme " 1.4.0 **" et entrez le fichier modèle .pkl </ code>. Sélectionner.
Lorsque vous enregistrez un modèle, le modèle que vous venez d'enregistrer sera affiché sur la page "Liste des modèles".
Vous pouvez utiliser le notebook jupyter à partir de «Notebook» sur l'écran d'Azure Machine Learning Studio. De la formation du modèle au déploiement, vous pouvez également opérer sur ce notebook Jupyter, Tutoriel de la documentation officielle Azure -deploy-models-with-aml) a un exemple de la procédure.
Vous pouvez sélectionner le modèle enregistré dans la «Liste des modèles» et le déployer à partir de «Déployer». Un écran comme celui-ci apparaîtra. Entrez le nom et la description (non requis), sélectionnez "** ACI **" (= Azure Container Instance) comme type de calcul, puis sélectionnez le fichier de script d'entrée et le fichier de dépendance Conda, respectivement. Cela sera discuté plus tard.
Sélectionnez maintenant "Déployer" et le déploiement commencera. À ce stade, vous pouvez modifier le nombre de cœurs de processeur et la taille de la mémoire de la machine virtuelle à télécharger à partir des «Conditions détaillées» ci-dessous, mais la valeur par défaut est également acceptable.
Comme expliqué dans Official Azure Documents, les services Web déployés avec ACI Il prend maintenant les données envoyées par le client, les transmet au modèle et renvoie le résultat obtenu au client. C'est ce fichier qui définit ce flux.
Créez-le avec un éditeur de code source approprié.
score.py
# coding: utf-8
# ---
# jupyter:
# jupytext:
# text_representation:
# extension: .py
# format_name: light
# format_version: '1.5'
# jupytext_version: 1.3.2
# kernelspec:
# display_name: Python 3.6 - AzureML
# language: python
# name: python3-azureml
# ---
import torch
import torchvision
import torchvision.transforms as transforms
import numpy as np
import os
import torch.nn as nn
import torch.nn.functional as F
import cloudpickle
from azureml.core.model import Model
import json
def init():
global model
path = os.path.join(os.getenv('AZUREML_MODEL_DIR'), 'KMNIST_cGAN.pkl')
with open(path, 'rb')as f:
model = cloudpickle.load(f)
def run(raw_data):
indexs = json.loads(raw_data)["indexs"]
index_list = indexs.split(',')
num_class = 49
z_dim = 100
for i, num in enumerate(index_list):
#Génération de bruit
noise = torch.normal(mean = 0.5, std = 1, size = (1, z_dim))
#Générer une étiquette à mettre dans le générateur
tmp = np.identity(num_class)[int(num)]
tmp = np.array(tmp, dtype = np.float32)
label = [tmp]
#Génération d'échantillons avec Generator
sample = model(noise, torch.Tensor(label)).detach()
#Format et liste
sample = sample.reshape((28,28))
img = sample.detach().numpy().tolist()
if i == 0:
comp_img = img
else:
comp_img.extend(img)
return comp_img
Deux fonctions sont définies.
init () </ code> est appelée une seule fois lorsque le service démarre et charge le modèle.
run (raw_data) </ code> définit comment transmettre les données reçues au modèle et renvoyer le résultat au client.
Lorsque vous enregistrez un modèle, le modèle est enregistré dans un répertoire appelé AZUREML_MODEL_DIR </ code>, appelez-le donc.
De plus, comme les données envoyées par le client sont au format json, nous les retirons, mettons l'étiquette dans le modèle (Générateur de cGAN), et retournons le résultat. À ce stade, le dernier retour dans le code ci-dessus est des données de type
liste
de python, mais il semble qu'il soit converti au format json avant de l'envoyer au client côté Azure, donc c'estcôté client
Vous devez le faire avec json.loads () `.
Le nom est le même, mais c'est un fichier qui définit les packages Conda nécessaires.
Ceci est également créé au format .yml
avec un éditeur de code source.
myenv.yml
# Conda environment specification. The dependencies defined in this file will
# be automatically provisioned for runs with userManagedDependencies=False.
# Details about the Conda environment file format:
# https://conda.io/docs/user-guide/tasks/manage-environments.html#create-env-file-manually
name: project_environment
dependencies:
# The python interpreter version.
# Currently Azure ML only supports 3.5.2 and later.
- python=3.6.2
- pip:
- azureml-defaults
- azureml-sdk
- azureml-contrib-services
- numpy
- pytorch
- torchvision
- cloudpickle
channels:
- conda-forge
- pytorch
Je viens de changer le .yml
de la documentation officielle. En cela, ʻazureml-defaults` semble être un paquetage nécessaire pour héberger un service Web, il est donc essentiel. Il doit être légèrement modifié en fonction du package utilisé pour le modèle.
Le déploiement prend beaucoup de temps. Je pense que cela dépend de l'environnement, mais cela m'a pris environ 10 à 15 minutes. Vérifiez si le déploiement a réussi.
Si vous recherchez dans le groupe de ressources que vous utilisez à partir de l'accueil du portail Azure dans «Groupe de ressources», l'instance de conteneur créée s'affichera après un certain temps à compter du début du déploiement. Accédez à la page de cette instance de conteneur. Cette fois, je l'ai déployé avec le nom "** kmnist-cgan **" plus tôt, donc le nom de l'instance de conteneur est celui-là. Lorsque vous ouvrez "Conteneur" dans "Paramètres", l'écran ci-dessus apparaîtra, et si le "Statut" (cadre rouge) des trois conteneurs passe de "En attente" à "En cours d'exécution", le déploiement est réussi.
À propos, si une erreur se produit pendant le processus de déploiement, les détails de l'erreur seront affichés dans la section «Journal» ci-dessous.
En particulier, les bogues à l'intérieur de score.py
et les erreurs pendant le traitement des requêtes sont affichés cette fois dans le journal du conteneur" kmnist-cgan ", donc regarder ici peut être utile pour le dépannage.
Ce que j'ai déployé ici est "cGAN **", qui renvoie un caractère brouillé lorsque vous entrez un caractère **. Essayez ceci localement.
Une fois le déploiement terminé et le service Web prêt à être utilisé, l'adresse IP et le nom de domaine complet seront affichés sur la page de l'instance de conteneur Azure, utilisez-le.
import requests
import json
import matplotlib.pyplot as plt
%matplotlib inline
url = "http://[FQDN de l'instance de conteneur créée]/score"
strings = input()
#Générer le numéro cible à l'aide du modèle extrait
def FaaS_KMNIST(url, strings):
letter = 'Aiue Okakikuke Kosashi Suseso Tachi Nune no Hahifuhe Homami Mumemoya Yuyorari Rurerowa'
indexs = ""
input_data = {}
for i in range(len(strings)):
str_index = letter.index(strings[i])
indexs += str(str_index)
if i != len(strings)-1:
indexs += ','
print(indexs)
input_data["indexs"] = str(indexs)
input_data = json.dumps(input_data)
headers = {"Content-Type":"application/json"}
resp = requests.post(url, input_data, headers=headers)
result = json.loads(resp.text)
return result
response = FaaS_KMNIST(url, strings)
plt.imshow(response,cmap ="gray")
Écrivez un code comme celui-ci et essayez-le. Puisque l'entrée est acceptée par ʻinput () `, lorsque vous tapez les caractères de manière appropriée, une telle image sera affichée à la fin. N'est-ce pas "OK"?
J'ai essayé de déployer le modèle ML créé sur Azure. Je ne pense pas que la méthode elle-même soit si difficile. Au moins, je pense que c'est plus facile que de déployer dans le bloc-notes jupyter d'Azure Machine Learning Studio, alors essayez-le.
Recommended Posts