Lorsque vous écrivez une application qui intègre l'apprentissage automatique en Python, cela dépend souvent de scicit-learn, voire de Numpy ou Scipy.
Celles-ci dépendent de diverses bibliothèques, donc le déploiement sur Heroku n'est pas simple. Si vous pouvez configurer votre propre serveur sur AWS, etc., vous pouvez le configurer là-bas, mais cela coûte de l'argent et je veux le faire avec Heroku! Je pense qu'il y a des cas, alors je vais vous présenter une méthode pour cela.
Docker Container
Le déploiement à l'aide de Docker Container est désormais possible dans Heroku, utilisez donc ceci plutôt que d'éditer le buildpack à la hâte. Est plus pratique. Vous trouverez ci-dessous un échantillon officiel, veuillez donc vous y référer.
heroku-examples/python-miniconda
Désormais, vous n'aurez plus rien à installer avec apt-get ni à vous plaindre que la taille de votre laitier est trop grande!
Conda buildpack
Les bibliothèques telles que Numpy et Scipy sont généralement assez difficiles à installer à partir de pip
, c'est-à-dire à construire à partir du code source. Il existe un environnement d'exécution appelé Miniconda qui peut éviter cela, c'est-à-dire installer le binaire compilé, mais un pack de construction qui peut être utilisé sur Heroku est fourni. Je suis.
Il y a deux façons de configurer un buildpack sur Heroku: le spécifier au moment de la création ou le modifier plus tard.
** Spécifié à la création **
heroku create --buildpack https://github.com/kennethreitz/conda-buildpack.git
** Précisez plus tard **
heroku config:add BUILDPACK_URL=https://github.com/kennethreitz/conda-buildpack.git
Pour l'utiliser, préparez simplement conda-requirements.txt
( requirements.txt
dans conda) pour l'installation avec conda. Ceux qui ne sont pas fournis par conda peuvent également être installés en utilisant pip, donc si vous avez besoin d'installer avec pip, vous pouvez toujours écrire dans requirements.txt
.
nomkl
à conda-requirements.txt
afin de ne pas utiliser la version optimisée mkl (# 21 vingt et un)).La difficulté est que l'environnement créé par conda entre en conflit avec virtualenv et ne peut pas être utilisé ensemble. Par conséquent, si vous souhaitez déployer dans Heroku, vous devez utiliser conda pour créer l'environnement virtuel. Pour une utilisation simple de la commande conda, reportez-vous à here.
Définissez le pack de construction dans Heroku et préparez le fichier de configuration pour conda. Vous pouvez désormais exécuter des applications avec des bibliothèques d'apprentissage automatique sur Heroku.
J'ai créé un référentiel que j'ai réellement essayé en utilisant conda-buildpack, alors veuillez vous y référer. Puisqu'il a un bouton Heroku, il peut être déployé tel quel.
Heroku buildpack
Ceci est un pack de construction que j'ai créé car je ne connaissais pas l'existence de conda-buildpack
et le déploie en fonction de pip comme d'habitude.
Cependant, la compilation de scipy prend tellement de temps qu'elle expire sur Heroku (assurez-vous que vous pouvez construire Numpy). Le seul moyen de surmonter cela est d'utiliser un meilleur Dyno, donc je pense que c'est difficile avec le niveau gratuit.
Heroku buildpack: Python with Numpy, Scipy, scikit-learn
Ce n'est pas seulement compatible avec Numpy et Scipy, il est conçu pour améliorer son environnement de compilation, il devrait donc fonctionner universellement pour les choses qui dépendent de bibliothèques similaires (celles qui). Je pense qu'il est fourni par conda ...). Si pip ne fonctionnait pas et que vous avez abandonné lors du déploiement d'Heroku, cela pourrait également fonctionner pour cela.
Vous pouvez utiliser heroku-buildpack-apt qui peut installer la bibliothèque avec apt-get dans l'environnement Heroku utilisé ici, ou connecter plusieurs packs de construction. heroku-buildpack-multi peut être utile dans d'autres scènes car il peut être utile de s'en souvenir. heroku-buildpack-multi peut être utilisé lors de l'utilisation de bower etc. (processus bower avec le pack de construction pour Node.js, puis exécutez le processus avec le pack de construction pour le corps principal).
Recommended Posts