Construirea Python Data Science Container folosind Docker
Fotografie de Bryan Goff pe Unsplash

TL; DR

Inteligența artificială (AI) și învățarea automată (ML) sunt literalmente în flăcări în aceste zile. Alimentarea unui spectru larg de cazuri de utilizare, de la mașini cu conducere automată până la descoperirea de droguri și până la Dumnezeu știe ce. AI și ML au un viitor luminos și înfloritor în fața lor.

Pe de altă parte, Docker a revoluționat lumea informatică prin introducerea de containere ușoare efemere. Containerele împachetează practic toate software-urile necesare pentru a rula în interiorul unei imagini (o grămadă de straturi numai în citire) cu un strat COW (Copy On Write) pentru a persista datele.

Discuție suficientă, să începem cu construirea unui container Python pentru știința datelor.


Pachete Python Data Science

Containerul nostru Python pentru știința datelor folosește următoarele pachete super cool Python:

  1. NumPy: NumPy sau Numeric Python acceptă matrici și tablouri mari, multi-dimensionale. Oferă funcții precompilate rapid pentru rutine matematice și numerice. În plus, NumPy optimizează programarea Python cu structuri de date puternice pentru calculul eficient al matricilor și matricilor multidimensionale.
  2. SciPy: SciPy oferă funcții utile pentru regresie, minimizare, transformare Fourier și multe altele. Bazat pe NumPy, SciPy își extinde capacitățile. Structura principală a datelor SciPy este din nou o matrice multidimensională, implementată de Numpy. Pachetul conține instrumente care ajută la rezolvarea algebrei liniare, a teoriei probabilităților, a calculului integral și a mai multor sarcini.
  3. Panda: Pandele oferă instrumente versatile și puternice pentru manipularea structurilor de date și efectuarea unei analize extinse a datelor. Funcționează bine cu date din lumea reală incomplete, nestructurate și neordonate – și vine cu instrumente pentru modelarea, agregarea, analiza și vizualizarea seturilor de date.
  4. SciKit-Learn: Scikit-learn este un modul Python care integrează o gamă largă de algoritmi de învățare automată de ultimă generație pentru probleme supravegheate și nesupravegheate la scară medie. Este una dintre cele mai cunoscute biblioteci de învățare automată pentru python. Pachetul Scikit-learn se concentrează pe aducerea învățării automate către nespecialiști care utilizează un limbaj de nivel înalt de uz general. Accentul principal se pune pe ușurința utilizării, performanța, documentarea și consistența API. Cu dependențe minime și distribuție ușoară sub licența BSD simplificată, SciKit-Learn este utilizat pe scară largă în setările academice și comerciale. Scikit-learn expune o interfață concisă și consecventă algoritmilor obișnuiți de învățare automată, simplificând introducerea ML în sistemele de producție.
  5. Matplotlib: Matplotlib este o bibliotecă de graficare Python 2D, capabilă să producă cifre de calitate a publicațiilor într-o mare varietate de formate de copiere pe suport de hârtie și medii interactive de pe platforme. Matplotlib poate fi utilizat în scripturi Python, shell-ul Python și IPython, notebook-ul Jupyter, servere de aplicații web și patru seturi de instrumente grafice de interfață cu utilizatorul.
  6. NLTK: NLTK este o platformă de vârf pentru construirea de programe Python pentru a lucra cu date de limbaj uman. Oferă interfețe ușor de utilizat la peste 50 de corpuri și resurse lexicale, cum ar fi WordNet, împreună cu o suită de biblioteci de procesare a textelor pentru clasificare, tokenizare, stemming, etichetare, analiză și raționament semantic.

Construirea containerului pentru știința datelor

Python devine rapid limbajul de bază pentru oamenii de știință de date și, din acest motiv, vom folosi Python ca limbă de alegere pentru construirea containerului nostru de știință a datelor.

Imaginea de bază Alpine Linux

Alpine Linux este o mică distribuție Linux concepută pentru utilizatorii avansați care apreciază securitatea, simplitatea și eficiența resurselor.

După cum susține alpin:

Mic. Simplu. Sigur. Alpine Linux este o distribuție Linux ușoară, orientată spre securitate, bazată pe musl libc și busybox.

Imaginea Alpine este surprinzător de mică, cu o dimensiune de maximum 8 MB pentru containere. Cu pachete minime instalate pentru a reduce suprafața de atac pe containerul subiacent. Acest lucru face din Alpine o imagine de alegere pentru containerul nostru de știință a datelor.

Descărcarea și rularea unui container Alpine Linux este la fel de simplă ca:

$ docker container run --rm alpine:latest cat /etc/os-release

În fișierul nostru Dockerfile putem folosi pur și simplu imaginea de bază Alpine ca:

FROM alpine:latest

Discuția este ieftină hai să construim fișierul Docker

Acum să ne croim drumul prin fișierul Docker.

FROM alpine:latest

LABEL MAINTAINER="Faizan Bashir <faizan.ibn.bashir@gmail.com>"

# Linking of locale.h as xlocale.h
# This is done to ensure successfull install of python numpy package
# see https://forum.alpinelinux.org/comment/690#comment-690 for more information.

WORKDIR /var/www/

# SOFTWARE PACKAGES
#   * musl: standard C library
#   * lib6-compat: compatibility libraries for glibc
#   * linux-headers: commonly needed, and an unusual package name from Alpine.
#   * build-base: used so we include the basic development packages (gcc)
#   * bash: so we can access /bin/bash
#   * git: to ease up clones of repos
#   * ca-certificates: for SSL verification during Pip and easy_install
#   * freetype: library used to render text onto bitmaps, and provides support font-related operations
#   * libgfortran: contains a Fortran shared library, needed to run Fortran
#   * libgcc: contains shared code that would be inefficient to duplicate every time as well as auxiliary helper routines and runtime support
#   * libstdc++: The GNU Standard C++ Library. This package contains an additional runtime library for C++ programs built with the GNU compiler
#   * openblas: open source implementation of the BLAS(Basic Linear Algebra Subprograms) API with many hand-crafted optimizations for specific processor types
#   * tcl: scripting language
#   * tk: GUI toolkit for the Tcl scripting language
#   * libssl1.0: SSL shared libraries
ENV PACKAGES="
    dumb-init 
    musl 
    libc6-compat 
    linux-headers 
    build-base 
    bash 
    git 
    ca-certificates 
    freetype 
    libgfortran 
    libgcc 
    libstdc++ 
    openblas 
    tcl 
    tk 
    libssl1.0 
"

# PYTHON DATA SCIENCE PACKAGES
#   * numpy: support for large, multi-dimensional arrays and matrices
#   * matplotlib: plotting library for Python and its numerical mathematics extension NumPy.
#   * scipy: library used for scientific computing and technical computing
#   * scikit-learn: machine learning library integrates with NumPy and SciPy
#   * pandas: library providing high-performance, easy-to-use data structures and data analysis tools
#   * nltk: suite of libraries and programs for symbolic and statistical natural language processing for English
ENV PYTHON_PACKAGES="
    numpy 
    matplotlib 
    scipy 
    scikit-learn 
    pandas 
    nltk 
" 

RUN apk add --no-cache --virtual build-dependencies python --update py-pip 
    && apk add --virtual build-runtime 
    build-base python-dev openblas-dev freetype-dev pkgconfig gfortran 
    && ln -s /usr/include/locale.h /usr/include/xlocale.h 
    && pip install --upgrade pip 
    && pip install --no-cache-dir $PYTHON_PACKAGES 
    && apk del build-runtime 
    && apk add --no-cache --virtual build-dependencies $PACKAGES 
    && rm -rf /var/cache/apk/*

CMD ["python"]
datascience-python2.7.Dockerfile

FROM directiva este utilizată pentru a seta alpine:latest ca imagine de bază. Folosind WORKDIR directivă pe care am stabilit-o /var/www ca director de lucru pentru containerul nostru. ENV PACKAGES listează pachetele software necesare pentru containerul nostru, cum ar fi git, blas și libgfortran. Pachetele Python pentru containerul nostru pentru știința datelor sunt definite în ENV PACKAGES.

Am combinat toate comenzile sub un singur fișier Docker RUN directivă pentru reducerea numărului de straturi, care la rândul său ajută la reducerea dimensiunii rezultate a imaginii.


Construirea și etichetarea imaginii

Acum că avem Dockerfile-ul definit, navigați la folderul cu Dockerfile folosind terminalul și construiți imaginea folosind următoarea comandă:

$ docker build -t faizanbashir/python-datascience:2.7 -f Dockerfile .

-t pavilion este folosit pentru a denumi o etichetă în formatul „nume: etichetă”. -f tag-ul este utilizat pentru a defini numele fișierului Docker (Implicit este „PATH / Dockerfile”).


Rularea containerului

Am construit și etichetat cu succes imaginea docker, acum putem rula containerul folosind următoarea comandă:

$ docker container run --rm -it faizanbashir/python-datascience:2.7 python

Voila, suntem întâmpinați de vederea unui shell de python gata să efectueze tot felul de lucruri interesante în domeniul științei datelor.

Python 2.7.15 (default, Aug 16 2018, 14:17:09) [GCC 6.4.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>

Containerul nostru vine cu Python 2.7, dar nu fiți trist dacă doriți să lucrați cu Python 3.6. Iată, iată fișierul Docker pentru Python 3.6:

https://gist.github.com/faizanbashir/9443a7149cc53f81d84d0d356f871ec7#file-datascience-python3-6-dockerfile

Construiți și etichetați imaginea astfel:

FROM alpine:latest

LABEL MAINTAINER="Faizan Bashir <faizan.ibn.bashir@gmail.com>"

# Linking of locale.h as xlocale.h
# This is done to ensure successfull install of python numpy package
# see https://forum.alpinelinux.org/comment/690#comment-690 for more information.

WORKDIR /var/www/

# SOFTWARE PACKAGES
#   * musl: standard C library
#   * lib6-compat: compatibility libraries for glibc
#   * linux-headers: commonly needed, and an unusual package name from Alpine.
#   * build-base: used so we include the basic development packages (gcc)
#   * bash: so we can access /bin/bash
#   * git: to ease up clones of repos
#   * ca-certificates: for SSL verification during Pip and easy_install
#   * freetype: library used to render text onto bitmaps, and provides support font-related operations
#   * libgfortran: contains a Fortran shared library, needed to run Fortran
#   * libgcc: contains shared code that would be inefficient to duplicate every time as well as auxiliary helper routines and runtime support
#   * libstdc++: The GNU Standard C++ Library. This package contains an additional runtime library for C++ programs built with the GNU compiler
#   * openblas: open source implementation of the BLAS(Basic Linear Algebra Subprograms) API with many hand-crafted optimizations for specific processor types
#   * tcl: scripting language
#   * tk: GUI toolkit for the Tcl scripting language
#   * libssl1.0: SSL shared libraries
ENV PACKAGES="
    dumb-init 
    musl 
    libc6-compat 
    linux-headers 
    build-base 
    bash 
    git 
    ca-certificates 
    freetype 
    libgfortran 
    libgcc 
    libstdc++ 
    openblas 
    tcl 
    tk 
    libssl1.0 
    "

# PYTHON DATA SCIENCE PACKAGES
#   * numpy: support for large, multi-dimensional arrays and matrices
#   * matplotlib: plotting library for Python and its numerical mathematics extension NumPy.
#   * scipy: library used for scientific computing and technical computing
#   * scikit-learn: machine learning library integrates with NumPy and SciPy
#   * pandas: library providing high-performance, easy-to-use data structures and data analysis tools
#   * nltk: suite of libraries and programs for symbolic and statistical natural language processing for English
ENV PYTHON_PACKAGES="
    numpy 
    matplotlib 
    scipy 
    scikit-learn 
    pandas 
    nltk 
    " 

RUN apk add --no-cache --virtual build-dependencies python3 
    && apk add --virtual build-runtime 
    build-base python3-dev openblas-dev freetype-dev pkgconfig gfortran 
    && ln -s /usr/include/locale.h /usr/include/xlocale.h 
    && python3 -m ensurepip 
    && rm -r /usr/lib/python*/ensurepip 
    && pip3 install --upgrade pip setuptools 
    && ln -sf /usr/bin/python3 /usr/bin/python 
    && ln -sf pip3 /usr/bin/pip 
    && rm -r /root/.cache 
    && pip install --no-cache-dir $PYTHON_PACKAGES 
    && apk del build-runtime 
    && apk add --no-cache --virtual build-dependencies $PACKAGES 
    && rm -rf /var/cache/apk/*

CMD ["python3"]
datascience-python3.6.Dockerfile

Rulați containerul astfel:

$ docker container run --rm -it faizanbashir/python-datascience:3.6 python

Cu aceasta, aveți un container gata de utilizare pentru a face tot felul de lucruri interesante în domeniul științei datelor.


Servind Puddin ‘

Cifre, aveți timp și resurse pentru a configura toate aceste lucruri. În caz contrar, puteți extrage imaginile existente pe care le-am construit deja și le-am împins în registrul Docker Docker Hub folosind:

# For Python 2.7 pull$ docker pull faizanbashir/python-datascience:2.7
# For Python 3.6 pull$ docker pull faizanbashir/python-datascience:3.6

După ce trageți imaginile, puteți utiliza imaginea sau extinde la fel în fișierul Dockerfile sau îl puteți folosi ca imagine în fișierul Docker-compune sau stivă.


Urmări

Lumea AI, ML devine destul de interesantă în aceste zile și va continua să devină și mai interesantă. Jucătorii mari investesc foarte mult în aceste domenii. Aproape timpul începe să profite de puterea datelor, cine știe că ar putea duce la ceva minunat.

Puteți verifica codul aici.

faizanbashir / python-datascience
Imagine Docker pentru containerul Python datascience cu pachete NumPy, SciPy, Scikit-learn, Matplotlib, nltk, pandas …github.com

Sper că acest articol a ajutat la construirea containerelor pentru proiectele dvs. de știință a datelor. Aplaudă dacă ți-a crescut cunoștințele, ajută-le să ajungă la mai mulți oameni.