[PYTHON] Si vous montez sur le Titanic ... vous mourez.

Ce qui a été fait

zwmew-57a83.gif

Qu'est-ce que tu fais

  1. Créez un modèle
  2. Déployez le modèle sur GCP
  3. Prédiction sur GCP

GoogleColab J'en ai fait un cahier, alors si

https://colab.research.google.com/drive/1s6_o-nvMmHhAeBAOoRDgE0UNU6Fe3XrC

procédure

Il a presque le même contenu que le notebook. Si vous rencontrez des difficultés pour ouvrir Colab, cliquez ici.


Enregistrement du compte GCP

[Explication avec image] Enregistrez un compte avec un essai gratuit de Google Cloud Platform (GCP)


Installez le SDK Google Cloud

Installation du SDK Google Cloud ~ Initialisation


Certification SDK

Authentifiez-vous avec votre compte Google pour jouer avec GCP à l'aide de la commande gcloud.

$ gcloud auth login

Création de projet

ID est interdit de brouillard.

$ PROJECT_ID=anata-no-pj-id
$ PROJECT_NAME=anata-no-pj-name

$ gcloud projects create $PROJECT_ID \
--name $PROJECT_NAME

Paramètres du compte de facturation

Si vous ne le définissez pas, une erreur 403 se produira lors de l'accès au compartiment.

Si la fenêtre contextuelle suivante n'apparaît pas, vous pouvez sauter car le compte de facturation a déjà été défini.


Activer le projet

Défini sur le projet cible de l'opération de commande.

$ gcloud config set project $PROJECT_ID

Vérification

! gcloud config list

# [component_manager]
# disable_update_check = True
# [compute]
# gce_metadata_read_timeout_sec = 0
# [core]
# account = [email protected]
# project = anata-no-pj-id
# 
# Your active configuration is: [default]

Si ça va


Définir la région, la zone, l'interprète

REGION=us-central1
ZONE=us-central1-a

$ gcloud config set compute/region $REGION
$ gcloud config set compute/zone $ZONE
$ gcloud config set ml_engine/local_python $(which python3)

Les régions où la prédiction en ligne d'AI Platform peut être utilisée sont les suivantes:

L'interpréteur est spécifié pour utiliser le système python3 pour l'entraînement local.


Vérification

$ gcloud config list

# [component_manager]
# disable_update_check = True
# [compute]
# gce_metadata_read_timeout_sec = 0
# region = us-central1
# zone = us-central1-a
# [core]
# account = [email protected]
# project = anata-no-pj-id
# [ml_engine]
# local_python = /usr/bin/python3
# 
# Your active configuration is: [default]

Si ça va


Cloner un ensemble de code d'entraînement

https://github.com/komiyakomiyakomiya/titanic_prediction_on_gcp

$ git clone https://github.com/komiyakomiyakomiya/titanic_prediction_on_gcp.git

Créer un répertoire pour enregistrer le modèle

notebook


import os

os.makedirs('./titanic_prediction_on_gcp/working/models/', exist_ok=True)

Former et enregistrer le modèle localement

Le modèle entraîné est enregistré sous . / Titanic_prediction_on_gcp / working / models / model.pkl.

$ gcloud ai-platform local train \
--package-path titanic_prediction_on_gcp/working/ \
--module-name working.predict_xgb

Créer un bucket

Créez un bucket dans GCS pour télécharger le modèle enregistré.

BUCKET_NAME=anata-no-bkt-name

$ gsutil mb -l $REGION gs://$BUCKET_NAME

Vérification

$ gsutil ls -la

# gs://anata-no-bkt-name/

Téléchargez le modèle enregistré dans GCS

$ gsutil cp ./titanic_prediction_on_gcp/working/models/model.pkl gs://$BUCKET_NAME/models/model.pkl

Vérification

$ gsutil ls gs://$BUCKET_NAME/models/

# gs://anata-no-bkt-name/models/model.pkl

Activer l'API

Activez les deux suivants pour utiliser l'API AI-Platform.

$ gcloud services enable ml.googleapis.com
$ gcloud services enable compute.googleapis.com

Vérification

$ gcloud services list --enabled

# NAME                              TITLE
# bigquery.googleapis.com           BigQuery API
# bigquerystorage.googleapis.com    BigQuery Storage API
# cloudapis.googleapis.com          Google Cloud APIs
# clouddebugger.googleapis.com      Stackdriver Debugger API
# cloudtrace.googleapis.com         Stackdriver Trace API
# compute.googleapis.com            Compute Engine API
# datastore.googleapis.com          Cloud Datastore API
# logging.googleapis.com            Stackdriver Logging API
# ml.googleapis.com                 AI Platform Training & Prediction API
# monitoring.googleapis.com         Stackdriver Monitoring API
# oslogin.googleapis.com            Cloud OS Login API
# servicemanagement.googleapis.com  Service Management API
# serviceusage.googleapis.com       Service Usage API
# sql-component.googleapis.com      Cloud SQL
# storage-api.googleapis.com        Google Cloud Storage JSON API
# storage-component.googleapis.com  Cloud Storage

OK s'il y a


Créer une ressource de modèle / ressource de version

Créez une ressource de modèle et une ressource de version, et associez-les au model.pkl téléchargé.

Ressource de modèle

MODEL_NAME=model_xgb
MODEL_VERSION=v1

$ gcloud ai-platform models create $MODEL_NAME \
--regions $REGION

Ressource de version

! gcloud ai-platform versions create $MODEL_VERSION \
--model $MODEL_NAME \
--origin gs://$BUCKET_NAME/models/ \
--runtime-version 1.14 \
--framework xgboost \
--python-version 3.5

Confirmation des données d'entrée

Faisons une prédiction en utilisant les données préparées à l'avance. Tout d'abord, vérifiez le contenu.

! cat titanic_prediction_on_gcp/input/titanic/predict.json

# [36.0, 0] <-36 ans,Masculin

Sous la forme [âge, sexe], le sexe est masculin: 0, féminin: 1.


Prédite par AI-Platform

! gcloud ai-platform predict \
--model model_xgb \
--version $MODEL_VERSION \
--json-instances titanic_prediction_on_gcp/input/titanic/predict.json

[0.44441232085227966] C'est OK si une telle valeur prédite est renvoyée.


Créer un compte de service

Ensuite, accédez à AI-Platform à partir de python et obtenez la prédiction. Vous aurez besoin d'une clé de compte de service, alors créez d'abord un compte de service.

SA_NAME=anata-no-sa-name
SA_DISPLAY_NAME=anata-no-sa-display-name

$ gcloud iam service-accounts create $SA_NAME \
--display-name $SA_DISPLAY_NAME \

Accorder des autorisations au compte de service

$ gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:[email protected] \
--role roles/iam.serviceAccountKeyAdmin

$ gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:[email protected] \
--role roles/ml.admin

Génération de clé de compte de service

$ gcloud iam service-accounts keys create titanic_prediction_on_gcp/service_account_keys/key.json \
--iam-account [email protected]

Lisez le chemin de key.json en tant que variable d'environnement

Générer un fichier .env et décrire les variables d'environnement et le chemin

$ echo GOOGLE_APPLICATION_CREDENTIALS=/content/titanic_prediction_on_gcp/service_account_keys/key.json > /content/titanic_prediction_on_gcp/.env

Vérification

$ cat ./titanic_prediction_on_gcp/.env

# GOOGLE_APPLICATION_CREDENTIALS=/content/titanic_prediction_on_gcp/service_account_keys/key.json

## Installez python-dotenv Je ne suis pas à Colab
$ pip install python-dotenv

Définir une fonction pour obtenir la prédiction

notebook


import googleapiclient.discovery
from dotenv import load_dotenv

#Paramètres des variables d'environnement
load_dotenv('/content/titanic_prediction_on_gcp/.env')


def main(input_data):
    input_data = [input_data]

    PROJECT_ID = 'anata-no-pj-id'
    VERSION_NAME = 'v1'
    MODEL_NAME = 'model_xgb'

    service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
    name += '/versions/{}'.format(VERSION_NAME)

    response = service.projects().predict(
        name=name,
        body={'instances': input_data}
    ).execute()

    if 'error' in response:
        print(response['error'])
    else:
        pred = response['predictions'][0]

    return pred

Créez un menu déroulant pour l'âge et le sexe

notebook


import ipywidgets as widgets
from ipywidgets import HBox, VBox


age = [i for i in range(101)]
sex = ['Masculin', 'Femme']

dropdown_age = widgets.Dropdown(options=age, description='âge: ')
dropdown_sex = widgets.Dropdown(options=sex, description='sexe: ')
variables = VBox(children=[dropdown_age, dropdown_sex])

VBox(children=[variables])

Prévoir

notebook


import numpy as np
from IPython.display import Image
from IPython.display import display_png


input_age = float(dropdown_age.value)
input_sex = 0 if dropdown_sex.value == 'Masculin' else 1
test_input = [input_age, input_sex]

pred = main(test_input)
# print(pred)
pred_binary = np.where(pred > 0.5, 1, 0)
# print(pred_binary)

print('\n Lorsque vous roulez sur le Titanic...')

if pred_binary == 1:
    display_png(Image('/content/titanic_prediction_on_gcp/images/alive.png'))
else:
    display_png(Image('/content/titanic_prediction_on_gcp/images/dead.png'))

Référence officielle

https://cloud.google.com/sdk/gcloud/reference/

https://cloud.google.com/sdk/gcloud/reference/ai-platform/

https://cloud.google.com/storage/docs/gsutil

Résumé

Merci d'avoir lu jusqu'au bout. En tant qu'oncle de 36 ans, je suis sur le point de mourir, alors je ferai très attention lorsque je conduirai le Titanic.

Recommended Posts

Si vous montez sur le Titanic ... vous mourez.
Si __name__ == Levez la main, si vous écrivez le code sous '__ main__'
Si vous souhaitez que vos collègues utilisent la même langue
Si vous cd, ls. Shiroyo ……
Vérifier si vous êtes un universitaire
Si vous dites TemplateDoesNotExist à
Pouvez-vous supprimer ce fichier?
Si vous supprimez la liste à mettre en boucle, vous deviendrez terrible.
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Comment trouver lorsque vous ne connaissez pas le répertoire d'installation Java