Рубрики
Без рубрики

Создание контейнера для Data Science Python с использованием Docker

Создайте контейнер для Data Science Python, чтобы запустить свои прохладные приложения по науке о данных. Tagged с Python, DataScience, Docker, Machinelearning.

Искусственный интеллект (ИИ) и машинное обучение (ML) буквально в эти дни в огне. Перевод широкого спектра использования, начиная от автомобилей с самостоятельным вождением до обнаружения наркотиков, и для Бога знает что. У AI и ML есть яркое и процветающее будущее впереди.

С другой стороны, Docker произвел революцию в вычислительном мире благодаря введению эфемерных легких контейнеров. Контейнеры в основном упаковывают все программное обеспечение, необходимое для запуска внутри изображения (куча слоев Readonly) со слоем коровы (копия на записи), чтобы сохранить данные.

Достаточно разговоров, давайте начнем с создания контейнера для Data Science Python.

Наш контейнер для данных Python использует следующие пакеты Super Cool Python:

  1. Numpy : Numpy или числовой питон поддерживает большие многомерные массивы и матрицы. Он обеспечивает быстрые предварительные функции для математических и численных процедур. Кроме того, Numpy оптимизирует программирование Python с мощными структурами данных для эффективного вычисления многомерных массивов и матриц.
  2. Scipy : SCIPY предоставляет полезные функции для регрессии, минимизации, трансформации Фурье и многих других. Основываясь на Numpy, Scipy расширяет свои возможности. Основная структура данных Scipy снова представляет собой многомерный массив, реализованный Numpy. Пакет содержит инструменты, которые помогают в решении линейной алгебры, теории вероятностей, интегрального исчисления и многих других задач.
  3. Панды : Панды предлагают универсальные и мощные инструменты для манипулирования структурами данных и выполнения обширного анализа данных. Он хорошо работает с неполными, неструктурированными и неупорядоченными данными реального мира-и поставляется с инструментами для формирования, агрегирования, анализа и визуализации наборов данных.
  4. Scikit-learn : Scikit-Learn-это модуль Python, интегрирующий широкий спектр современных алгоритмов машинного обучения для средних контролируемых и неконтролируемых проблем. Это одна из самых известных библиотек машинного обучения для Python. Пакет Scikit-Learn фокусируется на предоставлении машинного обучения неспециалистам с использованием языка высокого уровня общего назначения. Основной акцент делается на простоту использования, производительность, документацию и согласованность API. С минимальными зависимостями и легким распределением в соответствии с упрощенной лицензией BSD, Scikit-Learn широко используется в академических и коммерческих условиях. Scikit-Learn раскрывает краткий и последовательный интерфейс с общими алгоритмами машинного обучения, что делает его простым внедрением ML в производственные системы.
  5. Matplotlib : Matplotlib – это библиотека Python 2D -графика, способная производить фигуры качества публикации в широком спектре форматов жесткой атмопии и интерактивных сред по платформам. Matplotlib может использоваться в сценариях Python, оболочке Python и Ipython, ноутбуке Jupyter, серверах веб -приложений и четырех наборах инструментов пользовательского интерфейса.
  6. Nltk : NLTK является ведущей платформой для создания программ Python для работы с данными о человеческом языке. Он обеспечивает простые в использовании интерфейсы для более чем 50 корпоративных и лексических ресурсов, таких как Wordnet, а также набор библиотек обработки текста для классификации, токенизации, стебля, тегов, анализа и семантических рассуждений.

Python быстро становится языком для ученых данных, и по этой причине мы собираемся использовать Python в качестве языка выбора для создания нашего контейнера по науке о данных.

Базовое альпийское изображение Linux

Alpine Linux – это крошечное распределение Linux, предназначенное для энергетических пользователей, которые ценят безопасность, простоту и эффективность ресурсов.

Как утверждается Альпийский :

Маленький. Простой. Безопасный. Alpine Linux-это легкое распределение Linux, ориентированное на безопасность, основанную на Musl Libc и Busybox.

Альпийское изображение на удивление крошечное размером не более 8 МБ для контейнеров. С минимальными пакетами, установленными для уменьшения поверхности атаки на базовом контейнере. Это делает Alpine изображением выбора для нашего контейнера по науке о данных.

Загрузка и запуск контейнера Alpine Linux так же просто, как:

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

В нашем Dockerfile мы можем просто использовать альпийское базовое изображение как:

FROM alpine:latest

Разговор дешево Давайте построим dockerfile

Теперь давайте проработаем через Dockerfile.

FROM alpine:latest

LABEL MAINTAINER="Faizan Bashir "

# 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"]

От Директива используется для установки Alpine: последний как базовое изображение. Используя Workdir Директива мы устанавливаем /var/www как рабочий каталог для нашего контейнера. Env Packages Перечисляет программные пакеты, необходимые для нашего контейнера, например git , Блас и Libgfortran Анкет Пакеты Python для нашего контейнера по науке о данных определены в Env Packages Анкет

Мы объединили все команды под одним Dockerfile Запустить Директива, чтобы уменьшить количество слоев, которые, в свою очередь, помогают уменьшить результирующий размер изображения.

Создание и помечение изображения

Теперь, когда у нас определены наш Dockerfile, перейдите к папке с DockerFile, используя терминал, и создайте изображение, используя следующую команду:

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

-t Флаг используется для названия тега в формате «Имя: тег». -f Тег используется для определения имени DockerFile (по умолчанию «Path/dockerfile»).

Запуск контейнера

Мы успешно создали и отметили изображение Docker, теперь мы можем запустить контейнер, используя следующую команду:

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

Вуаля, нас встречает видом оболочки Python, готовой выполнить все виды классных наук о данных.

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.
>>>

Наш контейнер поставляется с Python 2.7, но не грустите, если вы хотите работать с Python 3.6. Вот, вот докерфил для Python 3.6:

FROM alpine:latest

LABEL MAINTAINER="Faizan Bashir "

# 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"]

Создайте и отметьте изображение так:

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

Запустите контейнер так:

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

При этом у вас есть готовый к использованию контейнер для выполнения всех классных вещей в науку о данных.

Цифры, у вас есть время и ресурсы, чтобы настроить все эти вещи. Если вы этого не сделаете, вы можете вытащить существующие изображения, которые я уже построил и подтолкнул к реестру Docker Docker Hub с использованием:

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

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

После вытягивания изображений вы можете использовать изображение и расширить в своем файле DockerFile или использовать в качестве изображения в вашем файле Docker-Compose или Stack.

Мир ИИ, ML становится довольно захватывающим в наши дни и будет продолжать становиться еще более захватывающим. Крупные игроки вкладывают значительные средства в эти области. Когда вы начинаете использовать силу данных, кто знает, что это может привести к чему -то замечательному.

Faizan Bashir/Python-Data Science

Docker Image для Python DataScience Container с Numpy, Scipy, Scikit-Learn, Matplotlib, NLTK, установленные пакеты Pandas.

#Docker Image для контейнеров Python DataScience

Оригинал: “https://dev.to/faizanbashir/building-python-data-science-container-usingdocker-3f8p”