Запускайте инференс моделей прямо внутри функций: модель загружается один раз на холодном старте и обслуживает предсказания на каждый запрос. Рантайм Python 3.12 (glibc) поставляет onnxruntime, onnx и scikit-learn как подключаемые слои, поэтому manylinux-колёса работают из коробки. Инференс выполняется только на CPU, без GPU.
Положите модель рядом с функцией
Положите файл модели рядом с обработчиком: перетащите его в дерево файлов редактора (бинарные ассеты сохраняются байт-в-байт) или включите в папку, которую разворачиваете через inquir deploy. В рантайме файл лежит в /var/task рядом с кодом. Подключите слой py-onnxruntime на панели слоёв.
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-колесом можно добавить слоем.