168 слов | 1 минута
Интеграция ML-модели на VPS
Этот документ описывает, как подключить модель машинного обучения к проекту на Bitrix (PHP), развернутому на VPS, используя Node.js + ONNX Runtime без Python.
Общая архитектура
Bitrix (PHP)
↓ HTTP POST
Node.js (Express API + ONNX Runtime)
↓
ONNX-модель (model.onnx)
Bitrix отправляет данные → Node.js выполняет модель → возвращает результат.
Какие типы моделей подходят для такой связки
Ниже - список задач и типов моделей, которые отлично работают через ONNX Runtime + Node.js.
Классификация текста
- BERT / MiniBERT
- DistilBERT
- RoBERTa
- ALBERT
Задачи: определение тональности, классификация сообщений, фильтрация спама.
Генерация текста
- GPT‑2 small/medium (ONNX)
- DistilGPT2
Задачи: автодополнение, описания товаров, подсказки.
Классификация изображений
- MobileNetV2
- EfficientNet-Lite
- ResNet50
- SqueezeNet
Object Detection
- YOLOv5/YOLOv8 (ONNX)
- SSD MobileNet
Табличные данные
- CatBoost
- LightGBM
- XGBoost
- sklearn модели
Рекомендательные системы
- LightFM
- Matrix Factorization
- NCF
Аудио
- Whisper Tiny (ONNX)
- Wav2Vec2
Что НЕ запускать
- большие GPT (GPT‑J, LLaMA 13B+)
- модели больше 3 GB
- GPU‑зависимые модели
Установка Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
Создание Node.js ML‑сервиса
mkdir ml-service
cd ml-service
npm init -y
npm install express onnxruntime-node
server.js
const express = require("express");
const ort = require("onnxruntime-node");
const app = express();
app.use(express.json());
let session;
async function loadModel() {
session = await ort.InferenceSession.create("model.onnx");
console.log("ONNX model loaded");
}
app.post("/predict", async (req, res) => {
try {
const input = Float32Array.from(req.body.input);
const feeds = {
input: new ort.Tensor("float32", input, [1, input.length])
};
const results = await session.run(feeds);
res.json({
result: results[Object.keys(results)[0]].data
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
loadModel();
app.listen(8000, () => console.log("ML API running on port 8000"));
Автозапуск через systemd /etc/systemd/system/ml-service.service:
[Unit]
Description=ML Node.js Service
After=network.target
[Service]
ExecStart=/usr/bin/node server.js
WorkingDirectory=/var/www/ml-service
Restart=always
User=root
[Install]
WantedBy=multi-user.target
Вызов из Bitrix (PHP)
function ml_predict($data)
{
$url = "http://127.0.0.1:8000/predict";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(["input" => $data]));
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
$result = ml_predict([1.0, 2.0, 3.0]);
print_r($result);
Итог
Bitrixостаётся на чистом PHPNode.jsвыполняет модель- работает на любой VPS
- можно использовать десятки типов моделей
- обновление модели не требует изменений на сайте