Существует спрос на приложения, использующие модели машинного обучения для прогнозирования результатов. Apple и Android изо дня в день совершенствуют свою базу, чтобы предоставить лучший опыт как разработчикам, так и конечным пользователям. Было несколько проблем с использованием обученных моделей в приложениях.

  • Совместимость с оборудованием и ОС
  • Дублирование усилий по разработке в Apps Development для использования одних и тех же обученных моделей.
  • Отдельные обученные модели для разных ОС — высокая стоимость обслуживания

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

Swift как серверная часть — с использованием Vapor

  • Свифт 5.5
  • Пара 4
  • Python3

АМС

  • Убунту 20.04
  • экземпляр t2.large

Модель машинного обучения (обученная) — SAV (python)

Нативные/кросс-платформенные приложения — использование API — надеюсь, мы уже знаем об этом ;-)

Давайте начнем! Проект XCode Vapor — на компьютере Mac

Создайте проект пакета Swift с помощью Vapor. Установите Vapor на свой компьютер Mac. Следуйте приведенной ниже документации —



Установите Python3 на компьютер Mac. Машины Mac обычно имеют две версии Python:

python — v2.7
python3 — v3.8 (or any other version of python v3)

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

brew install python

Это обновляет сопоставление python3 usr/bin для варки установленного python. Добавьте переменную ENV в ваш .bash_profile/.zshrc/.profile/.zprofile

export PYTHON_LIBRARY=/usr/bin/python3

В терминале — источник вашего файла профиля, где вы добавили переменную ENV

source ~/.zshrc

Модель машинного обучения — SAV (python)

Проверьте свой пример кода на Python — получите доступ к той же модели ML, установите необходимые библиотеки «импорта». Как правило, ниже приведены инструменты, необходимые для моделей PythonML.

Joblib

pip3 install joblib

панды

pip3 install pandas

научное обучение

pip3 install -U scikit-learn scipy matplotlib

Проект XCode Vapor

Добавьте PythonKit в зависимости от файла пакета.

.package(url: “https://github.com/pvieito/PythonKit.git", .branch(“master”))

Добавьте модели python — файлы SAV — в Project Sources › App

Добавьте модели SAV в раздел ресурсов файла package.swift — путь указан относительно папки приложения внутри исходников.

resources: [.copy(“Python/HeartRiskModel.sav”)],

Теперь в Swift File следуйте приведенным ниже инструкциям:

import PythonKit
class HeartRiskPythonModel {
/// URL of model assuming it was installed in the same bundle as this class
    class var urlOfModelInThisBundle : String {
        let _ = Bundle(for: self)
        return Bundle.module.path(forResource: “HeartRiskModel”, ofType:”sav”)!
    }
}

В файле Routes или целевом файле, где вы хотите использовать модель ML, загрузите классы модели как переменные уровня класса, используя ниже

let joblib = Python.import(“joblib”)
let heartModelPath = HeartRiskPythonModel.urlOfModelInThisBundle
let heartRiskModel = joblib.load(heartModelPath)

Теперь в вашем целевом методе используйте ниже —

let user_data = [[body.age, body.sex, body.cp, body.trestbps, body.chol, body.fbs, body.restecg, body.thalach, body.exang, body.oldpeak, body.slope, body.ca, body.thal]]
let predection = heartRiskModel.predict(user_data)
let predection_prob = heartRiskModel.predict_proba(user_data)

Очевидно, вы можете добиться того же, используя библиотеку CoreML от Apple, что прямолинейно, НО это связано с другими ограничениями:

  • Вам нужно настроить экземпляр Mac на AWS — это дорого
  • Вам всегда нужно сопоставлять модели Python с моделями CoreML.

Начнем жить! — В AWS войдите в систему, используя учетные данные, и настройте нового пользователя EC2 ИЛИ существующего — убедитесь, что для этого у вас есть как минимум экземпляр t2.large.

Использование root-пользователя — Установите Swift, следуя приведенным ниже командам — Ссылка для загрузки версии Swift в шаге 4 ниже — можно найти по адресу https://www.swift.org/download/

sudo apt update
sudo apt upgrade
sudo apt install binutils git gnupg2 libc6-dev libcurl4 libedit2 libgcc-9-dev libpython2.7 libsqlite3-0 libstdc++-9-dev libxml2 libz3-dev pkg-config tzdata zlib1g-dev
wget https://swift.org/builds/swift-5.3.3-release/ubuntu2004/swift-5.3.3-RELEASE/swift-5.3.3-RELEASE-ubuntu20.04.tar.gz
tar xzf swift-5.3.3-RELEASE-ubuntu20.04.tar.gz
sudo mv swift-5.3.3-RELEASE-ubuntu20.04 /usr/share/swift
echo "export PATH=/usr/share/swift/usr/bin:$PATH" >> ~/.bashrc
source  ~/.bashrc
swift --version

Установите Vapor, используя приведенную ниже документацию (я предпочел подход с набором инструментов)



Установите Python и необходимые зависимости на AWS, используя те же команды, что и выше.

Git Clone your Vapor Porject — перейдите в директорию с кодом и запустите проект, как показано ниже — (я сделал это, используя только пользователя root)

vapor run serve — hostname 0.0.0.0 — port 80

Все готово!! Теперь вы можете использовать API в приложениях для iOS и Android.