Запускайте инференс моделей прямо внутри функций: модель загружается один раз при холодном старте и обслуживает предсказания на каждый запрос. Среда выполнения Python 3.12 работает на glibc, поэтому manylinux-колёса вроде onnxruntime, onnx и scikit-learn ставятся как есть: объявите их в build.dependencies в inquir.yaml. Инференс выполняется только на CPU, без GPU.
Положите модель рядом с функцией#
Положите файл модели рядом с обработчиком: перетащите его в дерево файлов редактора (бинарные файлы сохраняются байт в байт) или включите в папку, которую разворачиваете через inquir deploy. В среде выполнения файл лежит в /var/task рядом с кодом. Объявите среду выполнения модели в inquir.yaml: build.dependencies: ["onnxruntime>=1.20"].
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()}), }
Создавайте сессию инференса на уровне модуля: тогда она загружается один раз на холодном старте и переиспользуется тёплыми контейнерами, а не на каждый запрос.
Память, размер и холодные старты#
- Модель должна помещаться в лимит памяти функции — 256 МБ по умолчанию, регулируется от минимума 64 МБ до 2 ГБ в настройках функции.
- Сессия загружается на холодном старте; тёплые контейнеры держат её в памяти, поэтому последующие вызовы пропускают загрузку.
- Большие модели удлиняют холодный старт. Держите модели небольшими или увеличьте лимит памяти и таймаут (5с по умолчанию, до 24 часов).
Другие ML-библиотеки#
Кроме ONNX Runtime, добавьте scikit-learn для классического ML (загрузите обученную модель и вызовите predict) или onnx для сборки и анализа .onnx-графов. Любой чисто питоновский пакет или пакет с manylinux-колесом добавляется в тот же список build.dependencies.