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$conda
cpython 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$conda
cpython 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$conda
cpython
- 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 }
Мы видим, что он правильно делает правильный прогноз, как показано ниже.