[PYTHON] Créez un environnement d'apprentissage automatique arbitraire avec GCP + Docker + Jupyter Lab

Aperçu

En utilisant GCP (GCE) + Docker + Jupyter Lab, j'ai pu créer un environnement de travail pour l'apprentissage automatique de la série python 3.6 qui utilise rigoureusement le GPU, je vais donc le résumer.

Contexte

Divers modèles d'apprentissage automatique sortent chaque jour, et le code source est également disponible sur GitHub, et même si je veux me sentir libre de l'essayer, python est 3.6 ou supérieur, ou je dois utiliser GPU. Cependant, même si vous essayez de créer une instance de notebook sur la plate-forme IA de GCP,

Python 3.5 est disponible avec la version d'exécution 1.4 et supérieure d'AI Platform. Pour soumettre une tâche d'entraînement dans Python 3.5, définissez la version Python sur "3.5" et la version d'exécution sur 1.4 ou une version supérieure. Plateforme AI de gestion des versions d'exécution pour TensorFlow

Comme vous pouvez le voir, il semble que la version d'exécution fournie par le préréglage ne concerne que python 3.5. En d'autres termes, si vous voulez utiliser python 3.6 ou supérieur, vous devez le faire vous-même, donc je l'ai fait moi-même.

Environnement créé cette fois

#Environnement de la machine hôte
~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

~$ uname -r
5.0.0-1025-gcp

~$ sudo docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:29:52 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:22 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

#Environnement à l'intérieur du conteneur Docker
~$ python -V
Python 3.6.9

~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

Créer une instance

Depuis la console GCP, créez-le comme indiqué dans l'image ci-dessous. La distribution par défaut est Debian, mais j'étais accro à l'installation du NVIDIA Container Toolkit décrit ci-dessous, j'ai donc choisi Ubuntu parce que j'ai pu découvrir une méthode existante.

スクリーンショット 2019-11-19 13.26.55.png スクリーンショット 2019-11-19 13.27.02.png スクリーンショット 2019-11-19 13.27.09.png

La commande de connexion est la suivante. Ouvrez le port localhost pour pouvoir toucher Jupyter Lab à partir du navigateur de votre PC.

~$ gcloud compute ssh --zone "ZONE" "INSTANCE_NAME" \
    -- -L 8888:localhost:8888

Rendre le GPU tactile depuis le conteneur Docker

La méthode de cette section imite la méthode de [Utilisation du GPU dans un conteneur Docker avec le conteneur NVIDIA Container Toolkit-CUBE SUGAR CONTAINER]. Veuillez vous référer au blog lié pour la méthode.

Vous pouvez vérifier si le GPU entre en contact avec le conteneur Docker en essayant ce qui suit.

~$ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi

NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs

Créez un Dockerfile pour votre environnement préféré et transférez-le vers GCR

Dans cette section, j'ai fait référence à [Créer un environnement de calcul pour Kaggle avec GCP et Docker --Qiita]. Veuillez consulter le lien pour la méthode détaillée. Cependant, comme cela sera décrit plus loin, certains détails diffèrent de l'article.

Le Dockerfile qui utilise python 3.6 est ci-dessous.

FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04

# install basic dependencies
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
    sudo git wget cmake nano vim gcc g++ build-essential ca-certificates software-properties-common \
    && rm -rf /var/lib/apt/lists/*

# install python 3.6
RUN add-apt-repository ppa:deadsnakes/ppa \
    && apt-get update \
    && apt-get install -y python3.6 python3-distutils \
    && wget -O ./get-pip.py https://bootstrap.pypa.io/get-pip.py \
    && python3.6 ./get-pip.py \
    && ln -s /usr/bin/python3.6 /usr/local/bin/python3 \
    && ln -s /usr/bin/python3.6 /usr/local/bin/python

# install common python packages
ADD ./requirements.txt /tmp
RUN pip install pip setuptools -U && pip install -r /tmp/requirements.txt

# set working directory
WORKDIR /root/user

# config and clean up
RUN ldconfig \
    && apt-get clean \
    && apt-get autoremove

C'est presque le même que l'article, mais j'ai également ajouté un point d'installation de python3-distutils pour résoudre les problèmes suivants.

Si vous souhaitez utiliser Python 3.6 sur Ubuntu 16.04 etc., utilisez ppa: jonathonf / python-3.6 comme indiqué ici. Il semble que le package ait été remplacé par la version 3.6.5 le 3 mai 2018, et lorsque j'ai mis à niveau là-bas, j'ai eu une erreur. ModuleNotFoundError: No module named 'distutils.sysconfig'。2018-05-07 - Qiita

J'ai fait le contenu de requrirements.txt comme suit. Je pense qu'il est pratique d'inclure des bibliothèques qui sont souvent utilisées par défaut.

requrirements.txt


requests
numpy
pandas
pillow
matplotlib
jupyter
jupyterlab
scikit_learn

Configurer un conteneur Docker sur le serveur

Lorsque Docker iamge enregistré dans GCR est docker pull sur le serveur, configurez un conteneur.

~$ docker run --name ml-workspace-container --gpus all \ 
    -p 8888:8888 -v ~/ml-workdir:/root/user/ml-workdir -itd \
    gcr.io/YOUR_PROJECT/IMAGE_NAME:TAG /bin/bash 

---- nom est approprié. comme vous voulez ---- gpus all est une relation utilisant le NVIDIA Container Toolkit. --runtime = nvidia n'est plus vieux

Entrez dans le conteneur et lancez Jupyter Lab

~$ docker exec -it ml-workspace-container /bin/bash
~$ jupyter lab --port 8888 --ip=0.0.0.0 --allow-root

À ce stade, vous pourrez voir Jupyter Lab dans votre navigateur.

Vous pouvez maintenant installer tensorflow comme vous le souhaitez et vous êtes libre d'expérimenter et de travailler. Enfin, n'oubliez pas d'arrêter l'instance GCE après l'expérience pour éviter la surcharge! w

J'espère que ça t'aide.

Les références

Recommended Posts

Créez un environnement d'apprentissage automatique arbitraire avec GCP + Docker + Jupyter Lab
Créez un environnement pour "Deep Learning from scratch" avec Docker
Créer un environnement Jupyter Lab (Python) avec Docker
Créer un environnement avec virtualenv
Créez un environnement d'apprentissage automatique à partir de zéro avec Winsows 10
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS
Reconstruction de l'environnement pour l'apprentissage automatique avec Miniconda (version Windows)
Apprentissage automatique à l'aide de Jupyter Notebook dans l'environnement OCI Always Free (2019/12/17)
Créer une application Todo avec Django ① Créer un environnement avec Docker
Créer un environnement d'auto-apprentissage qui semi-automatise l'apprentissage automatique (Mac et Docker)
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS avec Anaconda
Apprenez le machine learning à tout moment et en tout lieu dans l'environnement Jupyter Notebook à la demande
Comment créer un environnement NVIDIA Docker
Créer un environnement Python + uWSGI + Nginx avec Docker
Étapes rapides pour créer un environnement d'apprentissage automatique à l'aide de Jupyter Notebook sur macOS Sierra avec anaconda
Construction d'environnement AI / Machine Learning avec Python
Construire un environnement d'analyse avec Docker (jupyter notebook + PostgreSQL)
Créez l'environnement de calcul le plus puissant avec Sympy + Jupyter
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Créer un environnement d'apprentissage automatique Python avec des conteneurs
Construction d'environnement virtuel avec Docker + Flask (Python) + notebook Jupyter
Machine learning facile avec AutoAI (partie 4) Jupyter Notebook
Un moyen simple de créer un module d'importation avec jupyter
Créer un environnement de développement d'applications d'apprentissage automatique avec Python
Créer un nombre aléatoire avec une densité de probabilité arbitraire
Créez un environnement Open AI Gym avec Bash sur Windows 10
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
J'ai essayé de créer un environnement d'apprentissage automatique avec Python (Mac OS X)
Comment créer un environnement virtuel Anaconda à utiliser avec Azure Machine Learning et comment créer un lien avec Jupyter
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
Créez un stéréogramme de points aléatoires (RDS) original à partir de photos 2D avec estimation de la profondeur par apprentissage automatique
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Créez un environnement d'apprentissage automatique scikit-learn avec VirtualBox et Ubuntu
Créez une application d'apprentissage automatique avec ABEJA Platform + LINE Bot
Makefile minimal et buildout.cfg pour créer un environnement avec buildout
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créez un environnement GPU avec GCP et l'image officielle de Kaggle (docker)
Paramètres d'environnement d'apprentissage automatique basés sur Python3 sur Mac (coexistence avec Python2)
L'apprentissage automatique appris avec Pokemon
Une introduction à l'apprentissage automatique
Apprentissage automatique avec Python! Préparation
Préparer l'environnement python3 avec Docker
Démineur d'apprentissage automatique avec PyTorch
Créer un environnement d'apprentissage automatique
Commencer avec l'apprentissage automatique Python
Changer d'environnement virtuel avec jupyter
Essayez le machine learning à la légère avec Kaggle
Création d'un environnement Windows 7 pour une introduction à l'apprentissage automatique avec Python
Comment utiliser Jupyter Notebook sans polluer votre environnement avec Docker
Apprentissage automatique avec docker (42) Programmation PyTorch pour l'apprentissage en profondeur par Ian Pointer
Création d'un environnement d'apprentissage HPC à l'aide de Docker Compose (C, Python, Fortran)
Créer un environnement pour Django x Apache x mod_wsgi avec Vagrant (Ubuntu 16.04)
Comment créer une API de machine learning sans serveur avec AWS Lambda
Jusqu'à ce que vous démarriez Jupyter dans Docker
J'ai essayé l'apprentissage automatique avec liblinear