MLOPS Основи VII: Створення API для машинного навчання 🚀

pic

Амарачі Омереіфе: Основи Python для сертифікації MLOps

Зверніть увагу: серія "Основи MLOPS" натхненна модулями/уроками курсу під назвою Python Essentials for MLOPS, який є першим з чотирьох курсів, необхідних для завершення професійної програми; MLOPS (від Університету Дьюка на Coursera). Ці статті допомагають мені освоїти концепцію, а також документують мій шлях навчання для тих, хто може бути зацікавлений. Ця стаття (MLOPS Essentials VII) є останньою з серії, оскільки я успішно завершив перший курс із чотирьох. Наступна серія буде називатися: DevOps, DataOps, MLOps

pic

API (інтерфейси програмування додатків) визначаються як мости, що з’єднують користувача з потужними моделями машинного навчання.
З такими фреймворками Python, як Flask та FastAPI, створення API для машинного навчання стало доступнішим і масштабованим. У цьому посібнику розглядається світ API для машинного навчання, в якому ви дізнаєтесь, як створювати, захищати та оптимізувати їх, забезпечуючи надійність та зручність використання.

📜 Меню контенту

  1. Вступ до API для машинного навчання
  2. Топ-3 основні моменти: що вам потрібно знати
  • API та HTTP-запити 🌐
  • Спрощення розробки API за допомогою Flask та FastAPI 🛠️
  • Кращі практики для надійних API ✅
  1. Рефлексійні запитання
  • Детальні роздуми та пояснення

4. Завдання для вправ

  • Контейнеризація FastAPI за допомогою Docker 🐳
  • Створення API для аналізу настроїв 😊😡
  • Створення документації OpenAPI 📜
  • Захист Flask API за допомогою OAuth 🔒
  • Порівняння швидкості FastAPI і Flask 🏎️

1. Вступ до API для машинного навчання 🧠🌐

API є важливими інструментами в машинному навчанні, оскільки вони забезпечують стандартизований спосіб взаємодії з моделями. Замість того, щоб запускати моделі локально, API дозволяють користувачам надсилати HTTP-запити до сервера, на якому розміщена модель, яка обробляє вхідні дані та повертає прогнози.

Наприклад:

  • Уявіть собі, що користувач завантажує текстовий файл до API. API проводить аналіз настроїв тексту за допомогою попередньо натренованої моделі машинного навчання та відправляє відповідь, в якій зазначено, чи є настрій позитивним, негативним чи нейтральним.

Основні переваги API:

  1. Масштабованість: Моделі можуть обслуговувати кілька користувачів одночасно.
  2. Гнучкість: API можуть працювати з різними типами даних (текст, зображення тощо).
  3. Безпека: Доступ може бути контрольований через механізми автентифікації та авторизації.

2. Топ-3 основні моменти: що вам потрібно знати ✨

1. API та HTTP-запити: основа ML API 🌐

Основою роботи API є HTTP-запити. Ось як це працює:

  • HTTP-методи:
  • GET: Отримати дані з API.
  • POST: Надіслати дані до API (наприклад, завантажити зображення для класифікації).
  • PUT: Оновити існуючі дані.
  • DELETE: Видалити дані.
  • Приклад робочого процесу:
    Припустимо, у вас є API для розпізнавання зображень. Клієнт завантажує зображення через запит POST. Сервер обробляє зображення за допомогою моделі машинного навчання та повертає відповідь з прогнозами.
  • JSON: API зазвичай обмінюються даними у форматі JSON, який є легким і зручним для людини форматом даних.

2. Спрощення розробки API за допомогою Flask та FastAPI 🛠️

Фреймворки Python, такі як Flask і FastAPI, спрощують створення API:

Flask

  • Особливості:
    Легкий та гнучкий.
    — Мінімальні вимоги до налаштування
  • Приклад:
from flask import Flask, request, jsonify  

app = Flask(__name__)  

@app.route('/predict', methods=['POST'])  
def predict():  
 data = request.json  
 # Приклад логіки прогнозування  
 result = {"prediction": "positive"}  
 return jsonify(result)  

if __name__ == "__main__":  
 app.run()

FastAPI

  • Особливості:
    Вбудована підтримка валідації даних.

  • Автоматично генерує інтерактивну документацію (Swagger UI).

  • Приклад

from fastapi import FastAPI  
from pydantic import BaseModel  

app = FastAPI()  

class InputData(BaseModel):  
 text: str  

@app.post('/predict')  
async def predict(data: InputData):  
 # Приклад логіки прогнозування  
 return {"prediction": "positive"}  

if __name__ == "__main__":  
 import uvicorn  
 uvicorn.run(app)

3. Кращі практики для надійних API ✅

  • Обробка помилок: Завжди повертайте змістовні повідомлення про помилки.
  • Валідація запитів: Переконайтеся, що вхідні дані мають правильний формат.
  • Лімітування запитів: Запобігайте зловживанням, обмежуючи кількість запитів на користувача.
  • Логування: Зберігайте журнали для відлагодження та моніторингу використання API.

3. Рефлексійні запитання 🧐

1. Які моделі або дані було б корисно надавати через API?

Надання таких моделей, як класифікатори зображень, моделі аналізу настроїв або системи рекомендацій, дозволяє створювати додатки, такі як:

  • Прогнозування настрою клієнтів на основі відгуків.
  • Ідентифікація об'єктів на фотографіях для платформ електронної комерції.

2. Як можна забезпечити доступ до приватного API?

  • Використовуйте механізми автентифікації, такі як API-ключі або OAuth.
  • Реалізуйте лімітування запитів та білуйти листи IP-адрес.
  • Шифруйте передачу даних за допомогою HTTPS.

3. З якими труднощами ви стикалися при роботі з документацією для внутрішніх інструментів?

Типові проблеми включають застарілу документацію, відсутність інтерактивних прикладів та непослідовне форматування.

4. Як FastAPI порівняно з Flask може вплинути на структуру вашого API?

  • FastAPI: Сприяє структурованому, сучасному підходу з підказками типів.
  • Flask: Пропонує гнучкість, але може вимагати додаткових бібліотек для складніших функцій.

5. Які функції API допоможуть клієнтам використовувати моделі машинного навчання?

  • Інтерактивна документація (наприклад, Swagger UI).
  • Чіткі приклади вводу та виводу.
  • Підтримка пакетної обробки.

4. Завдання для вправ 🚀

pic

Створення API для машинного навчання є важливим навиком для розгортання інтелектуальних систем у великому масштабі. Незалежно від того, чи обираєте ви Flask за його простоту, чи FastAPI за сучасні функції, розуміння кращих практик гарантує, що ваші API будуть надійними та зручними для користувачів. Завдяки практиці та вивченню розширених функцій ви можете створювати API, які є міцними мостами між моделями та користувачами.

Давайте почнемо програмувати! 💻

1. Контейнеризація FastAPI додатка за допомогою Docker 🐳

  1. Створіть Dockerfile
FROM python:3.9-slim  

WORKDIR /app  

COPY requirements.txt .  

RUN pip install -r requirements.txt  

COPY . .  

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
  1. Створіть і запустіть Docker-образ
docker build -t fastapi-app .  
docker run -p 8000:8000 fastapi-app

2. Створення API для аналізу настроїв 😊😡

Сценарій: “API Детектор настроїв” 🔍😊😡

Ви приєдналися до компанії Marameref Inc на посаду молодшого розробника API. Компанія хоче аналізувати настрій клієнтів на основі публікацій у соціальних мережах і надавати результати через API. API має бути добре документованим, захищеним і швидким. Ваш керівник поставив вам наступні завдання:

  • Навчити модель для аналізу настроїв за допомогою scikit-learn або Hugging Face Transformers, використовуючи Jupyter notebook (з Google Colab, AWS SageMaker або Anaconda),
  • Надати модель через кінцеву точку FastAPI.

1. Навчання моделі аналізу настроїв і надання її через FastAPI 🧠➡️🌐

Крок 1: Налаштування середовища

  1. Встановіть залежності:
pip install fastapi uvicorn scikit-learn pandas numpy transformers
  1. Створіть директорію для проекту
mkdir sentiment_api && cd sentiment_api

Ініціалізація Python-скрипта (зазвичай); main.py

touch main.py
```

Крок 2: Навчання моделі аналізу настроїв

Для цього ми використовуватимемо бібліотеку Hugging Face’s Transformers для аналізу настроїв з попередньо навченою моделлю.

from transformers import pipeline  

# Завантаження pipeline для аналізу настроїв  
sentiment_analyzer = pipeline("sentiment-analysis")  

# Тестування моделі  
result = sentiment_analyzer("I love FastAPI! 😊")  
print(result)

Крок 3: Створення кінцевої точки FastAPI

Створіть API для прийому текстового вводу та повернення настрою.

from fastapi import FastAPI  
from pydantic import BaseModel  

# Ініціалізація FastAPI додатку  
app = FastAPI()  

# Опис моделі вводу  
class SentimentRequest(BaseModel):  
 text: str  

@app.post("/analyze")  
async def analyze_sentiment(request: SentimentRequest):  
 result = sentiment_analyzer(request.text)  
 return {"sentiment": result[0]['label'], "score": result[0]['score']}

Крок 4: Запуск API

Запустіть сервер FastAPI за допомогою Uvicorn:

uvicorn main:app --reload

Перевірте: Відкрийте http://127.0.0.1:8000/docs і спробуйте кінцеву точку /analyze. 🎉

2. Створення документації OpenAPI для Sentiment API 📜

Вбудована документація FastAPI

  1. Перейдіть на Swagger UI:
    Перейдіть за адресою http://127.0.0.1:8000/docs.
  2. Перейдіть на ReDoc Інтерфейс:
    Перейдіть за адресою http://127.0.0.1:8000/redoc.

FastAPI автоматично генерує документацію, сумісну з OpenAPI для кінцевої точки /analyze. Вона показує:

  • Формат вводу.
  • Приклад відповідей.
  • Використовувані моделі.

3. Захист API Flask за допомогою OAuth 🔒

Вам потрібно забезпечити безпеку ще одного API, використовуючи OAuth для приватного проєкту.

Крок 1: Налаштування Flask та Authlib

Встановіть залежності:

pip install Flask authlib

Крок 2: Створення API на Flask

from flask import Flask, request, jsonify  
from authlib.integrations.flask_oauth2 import ResourceProtector, BearerTokenValidator  

app = Flask(__name__)  
require_oauth = ResourceProtector()  

class MockBearerTokenValidator(BearerTokenValidator):  
 def authenticate_token(self, token):  
 if token == "valid-token":  
 return {"user": "authorized_user"}  
 return None  

 def request_invalid(self, request):  
 return False  

require_oauth.register_token_validator(MockBearerTokenValidator())  

@app.route('/secure-data', methods=['GET'])  
@require_oauth()  
def secure_data():  
 return jsonify({"message": "This is a secure endpoint!"})  

if __name__ == "__main__":  
 app.run(debug=True)

Крок 3: Тестування OAuth API

  1. Запустіть Flask-додаток (наприклад, app.py):
python app.py
  1. Отримайте доступ до кінцевої точки з дійсним токеном:
curl -H "Authorization: Bearer valid-token" http://127.0.0.1:5000/secure-data

Тепер спробуйте отримати доступ без токену (щоб побачити, як це виглядає з помилкою).
Тестування Python API фреймворків 🏎️

Крок 1: Створення еквівалентних API в FastAPI та Flask

Створіть ідентичні API для аналізу настроїв в обох фреймворках.

  • Код для FastAPI: Як показано вище.
  • Код для Flask:
from flask import Flask, request, jsonify  
from transformers import pipeline  

app = Flask(__name__)  
sentiment_analyzer = pipeline("sentiment-analysis")  

@app.route('/analyze', methods=['POST'])  
def analyze():  
 data = request.json  
 result = sentiment_analyzer(data['text'])  
 return jsonify({"sentiment": result[0]['label'], "score": result[0]['score']})  

if __name__ == "__main__":  
 app.run()

Крок 2: Встановлення інструментів для тестування

Встановіть Apache Benchmark або Locust:

sudo apt install apache2-utils # Для Apache Benchmark  
pip install locust # Для Locust

Крок 3: Тестування API

  • За допомогою Apache Benchmark (ab):
ab -n 1000 -c 10 -p post_data.json -T "application/json" http://127.0.0.1:8000/analyze

Замініть post_data.json на:

{"text": "I love benchmarking APIs!"}

За допомогою Locust:
Створіть файл locustfile.py:

from locust import HttpUser, task  

class SentimentUser(HttpUser):  
 @task  
 def analyze(self):  
 self.client.post("/analyze", json={"text": "I love FastAPI!"})

Запустіть Locust

locust

Відкрийте інтерфейс Locust за адресою http://127.0.0.1:8089 і проведіть тести.

5. Висновок 🎉

Вітаємо, ви успішно створили, захистили, задокументували та протестували API для аналізу настроїв. Поєднуючи FastAPI та Flask з індустріальними практиками, ви готові до вирішення реальних API-завдань. 🚀

Перекладено з: MLOPS Essentials VII: Building Machine Learning APIs🚀

Leave a Reply

Your email address will not be published. Required fields are marked *