Разделы

Запуск ML-моделей (ONNX)

Запускайте инференс моделей прямо внутри функций: модель загружается один раз на холодном старте и обслуживает предсказания на каждый запрос. Рантайм Python 3.12 (glibc) поставляет onnxruntime, onnx и scikit-learn как подключаемые слои, поэтому manylinux-колёса работают из коробки. Инференс выполняется только на CPU, без GPU.

Положите модель рядом с функцией

Положите файл модели рядом с обработчиком: перетащите его в дерево файлов редактора (бинарные ассеты сохраняются байт-в-байт) или включите в папку, которую разворачиваете через inquir deploy. В рантайме файл лежит в /var/task рядом с кодом. Подключите слой py-onnxruntime на панели слоёв.

handler.py
import os, json
import numpy as np
import onnxruntime as ort

# Created once per cold start, reused by warm containers — not per request.
_MODEL = os.path.join(os.path.dirname(__file__), "model.onnx")
_session = ort.InferenceSession(_MODEL, providers=["CPUExecutionProvider"])
_input = _session.get_inputs()[0].name

def handler(event, context):
    raw = event.get("body")
    payload = json.loads(raw) if isinstance(raw, str) else (event or {})
    features = np.array(payload["features"], dtype=np.float32).reshape(1, -1)
    outputs = _session.run(None, {_input: features})
    return {
        "statusCode": 200,
        "body": json.dumps({"prediction": outputs[0].tolist()}),
    }

Создавайте сессию инференса на уровне модуля: тогда она загружается один раз на холодном старте и переиспользуется тёплыми контейнерами (~5мс на тёплый вызов), а не на каждый запрос.

Память, размер и холодные старты

  • Модель должна помещаться в лимит памяти функции — 256МБ по умолчанию, до 2ГБ в настройках функции.
  • Сессия загружается на холодном старте; тёплые контейнеры держат её в памяти, поэтому последующие вызовы пропускают загрузку.
  • Большие модели удлиняют холодный старт. Держите модели небольшими или увеличьте лимит памяти и таймаут (5с по умолчанию, до 15 минут).

Другие ML-библиотеки

Кроме ONNX Runtime, подключите py-scikit-learn для классического ML (загрузите обученную модель и вызовите predict) или py-onnx для сборки и анализа .onnx-графов. Любой чисто питоновский пакет или пакет с manylinux-колесом можно добавить слоем.