Реализация создания продвинутых API для машинного обучения с несколькими конечными точками с помощью LitServe: пакетная обработка, потоковая передача, кэширование и локальный вывод

В этом руководстве мы рассмотрим LitServe — лёгкую и мощную платформу для запуска моделей машинного обучения в виде API с минимальными усилиями. Мы создадим и протестируем несколько конечных точек, которые демонстрируют функциональные возможности в реальных условиях, такие как генерация текста, пакетная обработка, потоковая передача, многозадачная обработка и кэширование, все работающие локально без использования внешних API. К концу мы чётко поймём, как проектировать масштабируемые и гибкие конвейеры для обслуживания машинного обучения, которые одновременно эффективны и просты в расширении для приложений производственного уровня.

Установка среды и зависимостей

Мы начинаем с настройки нашей среды в Google Colab и установки всех необходимых зависимостей, включая LitServe, PyTorch и Transformers. Затем мы импортируем основные библиотеки и модули, которые позволят нам эффективно определять, запускать и тестировать наши API.

«`python
import litserve as ls
import torch
from transformers import pipeline
import time
from typing import List
«`

Создание API для генерации текста

Здесь мы создаём два API LitServe: один для генерации текста с использованием локальной модели DistilGPT2, а другой для пакетного анализа настроений. Мы определяем, как каждый API декодирует входящие запросы, выполняет вывод и возвращает структурированные ответы, демонстрируя, насколько просто создавать масштабируемые, повторно используемые конечные точки для обслуживания моделей.

«`python
class TextGeneratorAPI(ls.LitAPI):
def setup(self, device):
self.model = pipeline(«text-generation», model=»distilgpt2″, device=0 if device == «cuda» and torch.cuda.is_available() else -1)
self.device = device
def decode_request(self, request):
return request[«prompt»]
def predict(self, prompt):
result = self.model(prompt, maxlength=100, numreturnsequences=1, temperature=0.8, dosample=True)
return result[0][‘generated_text’]
def encode_response(self, output):
return {«generated_text»: output, «model»: «distilgpt2»}
«`

Создание API для пакетного анализа настроений

«`python
class BatchedSentimentAPI(ls.LitAPI):
def setup(self, device):
self.model = pipeline(«sentiment-analysis», model=»distilbert-base-uncased-finetuned-sst-2-english», device=0 if device == «cuda» and torch.cuda.is_available() else -1)
def decode_request(self, request):
return request[«text»]
def batch(self, inputs: List[str]) -> List[str]:
return inputs
def predict(self, batch: List[str]):
results = self.model(batch)
return results
def unbatch(self, output):
return output
def encode_response(self, output):
return {«label»: output[«label»], «score»: float(output[«score»]), «batched»: True}
«`

Тестирование API локально

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

«`python
def testapislocally():
print(«=» * 70)
print(«Testing APIs Locally (No Server)»)
print(«=» * 70)

api1 = TextGeneratorAPI(); api1.setup(«cpu»)
decoded = api1.decode_request({«prompt»: «Искусственный интеллект будет»})
result = api1.predict(decoded)
encoded = api1.encode_response(result)
print(f»✓ Result: {encoded[‘generated_text’][:100]}…»)

api2 = BatchedSentimentAPI(); api2.setup(«cpu»)
texts = [«Я люблю Python!», «Это ужасно.», «Нейтральное заявление.»]
decodedbatch = [api2.decoderequest({«text»: t}) for t in texts]
batched = api2.batch(decoded_batch)
results = api2.predict(batched)
unbatched = api2.unbatch(results)
for i, r in enumerate(unbatched):
encoded = api2.encode_response(r)
print(f»✓ ‘{texts[i]}’ -> {encoded[‘label’]} ({encoded[‘score’]:.2f})»)

api3 = MultiTaskAPI(); api3.setup(«cpu»)
decoded = api3.decode_request({«task»: «sentiment», «text»: «Потрясающий урок!»})
result = api3.predict(decoded)
print(f»✓ Sentiment: {result[‘result’]}»)

api4 = CachedAPI(); api4.setup(«cpu»)
test_text = «LitServe — это круто!»
for i in range(3):
decoded = api4.decoderequest({«text»: testtext})
result = api4.predict(decoded)
encoded = api4.encode_response(result)
print(f»✓ Request {i+1}: {encoded[‘label’]} (cached: {encoded[‘from_cache’]})»)

print(«=» * 70)
print(«Все тесты пройдены успешно!»)
print(«=» * 70)

testapislocally()
«`

В заключение мы создаём и запускаем разнообразные API, которые демонстрируют универсальность платформы. Мы экспериментируем с генерацией текста, анализом настроений, многозадачностью и кэшированием, чтобы ощутить бесшовную интеграцию LitServe с конвейерами Hugging Face. Завершив руководство, мы понимаем, как LitServe упрощает рабочие процессы развёртывания моделей, позволяя нам обслуживать интеллектуальные системы машинного обучения всего несколькими строками кода Python, сохраняя при этом гибкость, производительность и простоту.

1. Какие преимущества предоставляет платформа LitServe для создания продвинутых API в машинном обучении?

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

2. Какие шаги включает в себя процесс установки среды и зависимостей для работы с LitServe?

Ответ: Процесс установки начинается с настройки среды в Google Colab и установки всех необходимых зависимостей, включая LitServe, PyTorch и Transformers. Затем импортируются основные библиотеки и модули, которые позволят эффективно определять, запускать и тестировать API.

3. Какие типы API были созданы в рамках данного руководства и для каких задач они предназначены?

Ответ: В рамках руководства были созданы два типа API:
* API для генерации текста с использованием локальной модели DistilGPT2.
* API для пакетного анализа настроений с использованием модели distilbert-base-uncased-finetuned-sst-2-english.

4. Как осуществляется тестирование API локально без запуска внешнего сервера?

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

5. Какие выводы можно сделать о платформе LitServe после завершения руководства?

Ответ: После завершения руководства можно сделать вывод, что LitServe упрощает рабочие процессы развёртывания моделей, позволяя обслуживать интеллектуальные системы машинного обучения всего несколькими строками кода Python, сохраняя при этом гибкость, производительность и простоту.

Источник