E8Manifold — ML Ops для серьезных специалистов по данным и инженеров по машинному обучению

Фон

В прошлом Jupyter Notebooks использовались для разработки и обучения машинному обучению на этапе разработки. Однако вопрос развертывания моделей машинного обучения подробно не рассматривался.

Элементы ML-систем

Платформы машинного обучения включают в себя множество элементов, включая сбор данных, проверку данных, настройку, разработку функций, конфигурацию, анализ моделей, планирование ресурсов, планирование процессов, управление метаданными, тестирование, отладку, автоматизацию, обслуживание и мониторинг обслуживающей инфраструктуры.

Инженерия машинного обучения — это область, в которой инженеры по машинному обучению могут разрабатывать и развертывать модель, не обязательно полагаясь на инженеров по devops.

Такие платформы, как HuggingFace, полагаются на инженеров машинного обучения для развертывания моделей, а не на DevOps.

Лучшие инструменты разработки MLE

VSCode — рекомендуемая IDE для инженеров по машинному обучению. Нам нужно установить расширение Jupyter VSCode для шагов в этом руководстве.

В этой серии руководств мы развернем модель машинного обучения в виде API под названием E8Lattice, чтобы ее можно было интегрировать в мобильное или веб-приложение.

E8Lattice — это небольшая языковая модель, которую можно использовать для генерации названий стартапов, названий продуктов или названий чего угодно.

Технический стек

Наш технический стек должен состоять из Python, Conda, Pip, Jupyter, VSCode, FastAPI и Docker.

Настраивать

Нам нужно настроить нашу локальную среду с зависимостями для нашего технического стека, который включает Juypter, Notebook и Conda.

Для компьютеров Mac M1 (которые представляют собой Mac с архитектурой ARM64) нам нужно использовать версию Conda miniforge с использованием Homebrew, как показано ниже:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install miniforge

После завершения установки вы почти готовы использовать команду $conda. Вам нужно получить то, что находится в вашем .bashrc или .zshrc.

Запустите приведенную ниже команду и перезапустите терминал.

conda init bash 
OR
conda init zsh

Откройте новый терминал, чтобы загрузить переменные среды .bash_profile в вашу оболочку. Затем создайте среду conda, используя следующую команду

conda create --name e8lattice python=3.8 pip

Это должно дать нам следующую подсказку

==> conda create --name e8lattice python=3.8 pip
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
  environment location: /opt/homebrew/Caskroom/miniforge/base/envs/e8lattice
  added / updated specs:
    - pip
    - python=3.8

The following packages will be downloaded:
    package                    |            build
    ---------------------------|-----------------
    python-3.8.15              |h3ba56d0$condacpython        11.2 MB  conda-forge
    setuptools-66.1.1          |     pyhd8ed1ab_0         630 KB  conda-forge
    ------------------------------------------------------------
                                           Total:        11.8 MB
The following NEW packages will be INSTALLED:
  bzip2              conda-forge/osx-arm64::bzip2-1.0.8-h3422bc3_4 
  ca-certificates    conda-forge/osx-arm64::ca-certificates-2022.12.7-h4653dfc_0 
  libffi             conda-forge/osx-arm64::libffi-3.4.2-h3422bc3_5 
  libsqlite          conda-forge/osx-arm64::libsqlite-3.40.0-h76d750c_0 
  libzlib            conda-forge/osx-arm64::libzlib-1.2.13-h03a7124_4 
  ncurses            conda-forge/osx-arm64::ncurses-6.3-h07bb92c_1 
  openssl            conda-forge/osx-arm64::openssl-3.0.7-h03a7124_2 
  pip                conda-forge/noarch::pip-22.3.1-pyhd8ed1ab_0 
  python             conda-forge/osx-arm64::python-3.8.15-h3ba56d0$condacpython 
  readline           conda-forge/osx-arm64::readline-8.1.2-h46ed386_0 
  setuptools         conda-forge/noarch::setuptools-66.1.1-pyhd8ed1ab_0 
  tk                 conda-forge/osx-arm64::tk-8.6.12-he1e0b03_0 
  wheel              conda-forge/noarch::wheel-0.38.4-pyhd8ed1ab_0 
  xz                 conda-forge/osx-arm64::xz-5.2.6-h57fd34a_0 

Proceed ([y]/n)?

После загрузки и извлечения пакетов можно активировать среду conda, как показано ниже.

conda activate e8lattice

Можно также экспортировать файл yml среды conda с помощью приведенной ниже команды.

conda env export > environment.yml

Файл yaml должен выглядеть так, как показано ниже.

name: e8lattice
channels:
  - conda-forge
dependencies:
  - bzip2=1.0.8=h3422bc3_4
  - ca-certificates=2022.12.7=h4653dfc_0
  - libffi=3.4.2=h3422bc3_5
  - libsqlite=3.40.0=h76d750c_0
  - libzlib=1.2.13=h03a7124_4
  - ncurses=6.3=h07bb92c_1
  - openssl=3.0.7=h03a7124_2
  - pip=22.3.1=pyhd8ed1ab_0
  - python=3.8.15=h3ba56d0$condacpython
  - readline=8.1.2=h46ed386_0
  - setuptools=66.1.1=pyhd8ed1ab_0
  - tk=8.6.12=he1e0b03_0
  - wheel=0.38.4=pyhd8ed1ab_0
  - xz=5.2.6=h57fd34a_0
prefix: /opt/homebrew/Caskroom/miniforge/base/envs/e8lattice

Cmd-Shit-P, чтобы открыть палитру команд в VSCode и выбрать пункт меню «Выбор интерпретатора».

Затем выберите интерпретатор Conda -> e8lattice из списка.

Запустите приведенную ниже команду, чтобы установить jupyter и ноутбук.

conda install jupyter notebook

Создайте тестовый ipynb с именем test.ipynb следующим образом.

Обязательно выберите ядро ​​e8lattice в правом верхнем углу.

Если кто-то заглянет в папку приложения в приведенном ниже репо —



Можно найти main.py для конечных точек FastAPI, а также файл рассола предварительно обученной модели wine.pkl.

Набор винных данных содержит 178 образцов, 13 измерений признаков и 3 класса.

Мы развертываем веб-сервер FastAPI следующим образом.

Запустите pip install fastapi, чтобы заставить fastapi работать

pip install numpy
pip install -U scikit-learn scipy matplotlib
pip install "fastapi[all]"

Запустите веб-сервер следующим образом

uvicorn main:app --reload

Теперь мы можем открыть localhost:8000/docs в нашем браузере и увидеть нашу документацию по API, как показано ниже.

Теперь мы можем предоставить приведенные ниже данные из примеров в качестве примера конечной точке FastAPI.

{
  "alcohol":12.6,
  "malic_acid":1.34,
  "ash":1.9,
  "alcalinity_of_ash":18.5,
  "magnesium":88.0,
  "total_phenols":1.45,
  "flavanoids":1.36,
  "nonflavanoid_phenols":0.29,
  "proanthocyanins":1.35,
  "color_intensity":2.45,
  "hue":1.04,
  "od280_od315_of_diluted_wines":2.77,
  "proline":562.0
}

Мы видим, что он правильно делает правильный прогноз, как показано ниже.