Product · AI & machine learning

The AI platform that
never exports your data.

Train, fine-tune and serve models, classic ML and GenAI, on GPU compute in your own European cloud. Open models flow in from the Hugging Face Hub; your data and weights never flow out.

The full lifecycle, one platform

01

Data

Your Iceberg lakehouse feeds training directly. No exports, no copies, no staging buckets.

02

Train

GPU clusters on demand in your region. Single node or distributed, A100-class hardware.

03

Track

Every run, metric, parameter and artifact logged with the MLflow-compatible SDK.

04

Register

Version models and promote them through Staging and Production stages.

05

Serve

One click from a registered version to a live, low-latency endpoint.

06

Monitor

QPS, latency and full lineage from the model back to the exact data it saw.

Training

Serious training,
on your GPUs.

GPU on demand

Provision A100-class GPU instances on your own OVH or Scaleway account when a job starts, release them when it ends. Auto-stop means no forgotten cluster ever burns budget.

Train on the lakehouse

Read training sets straight from your Iceberg tables. The data never leaves your bucket, your VPC or your jurisdiction.

Distributed when you need it

Scale from a notebook prototype to a multi-GPU job with the same code, scheduled as a DAG task with retries and timeouts.

Reproducible by design

Every run snapshots its image, parameters and data lineage, so any result can be traced and re-run.

train.py · runs on gpu.a100 in GRA9
from polnor import mlflow
import polnor as pl

# training data straight from your lakehouse
df = pl.read("acme.ml.training_set")

with mlflow.start_run(experiment="churn-v4"):
    mlflow.log_param("lr", 3e-4)
    for step, loss in train(df):
        mlflow.log_metric("loss", loss, step=step)
    mlflow.log_artifact("model.pt")
epoch 11/12 · loss 0.084 · gpu0 96% · gpu1 94% epoch 12/12 · loss 0.081 · auc 0.934 [ok] run_8f2a logged · artifacts → s3://acme-lakehouse

Open models

Direct line to the
Hugging Face Hub.

Your training jobs and notebooks pull models, datasets and tokenizers straight from the Hugging Face Hub. Fine-tune them on private data, cache weights on your own bucket, and register the result in your registry.

  • Any open model: Mistral, Llama, Qwen, BERT family, Whisper, embeddings
  • Private HF tokens stored encrypted, like every other credential
  • Weights cached on your S3, so repeat runs don't re-download
  • The Hub is the only thing that flows in. Nothing of yours flows out.
finetune.py · transformers + polnor
from transformers import AutoModel, AutoTokenizer
from polnor import mlflow
import polnor as pl

# pulled from the Hugging Face Hub, cached on your S3
model = AutoModel.from_pretrained("mistralai/Mistral-7B-v0.3")
tok   = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.3")

corpus = pl.read("acme.ml.support_tickets")  # private data

with mlflow.start_run(experiment="support-llm"):
    finetune(model, tok, corpus)
    mlflow.log_artifact("adapter.safetensors")

GenAI & agents

GenAI on data that
stays home.

01 · Fine-tune

Fine-tune open models

Pull any open model from the Hugging Face Hub and fine-tune it on your private data, on your GPUs. Weights and data stay in your account.

02 · Retrieve

RAG on your lakehouse

Build retrieval pipelines over governed Iceberg tables, with embeddings computed and stored on your own infrastructure.

03 · Serve

Serve LLMs privately

Deploy fine-tuned or open models behind your own endpoints. No prompt, no document, no embedding ever reaches a US AI cloud.

04 · Build

Build AI apps and agents

Wire models, data and jobs together through the API and SDK to ship assistants and agents that answer from your data.

MLOps, built in

Not an add-on.
It's the console.

Experiments

Runs, parameters, tags and step-by-step metric history, browsable and comparable in the console.

Model registry

Versioned models with stages, descriptions and back-links to the endpoints serving them.

Artifacts on your S3

Checkpoints and models upload via presigned URLs straight to your bucket. The control plane never holds them.

Serving endpoints

Low-latency inference with live QPS and latency, subject to per-workspace quotas you control.

Drop-in MLflow SDK

Already on MLflow? Change one import: from polnor import mlflow. Autolog included.

Governed end to end

Audit and lineage cover training and inference, the evidence trail AI regulation increasingly demands.

Serving

From registry to live
endpoint in one step.

Promote a model version and Polnor provisions the endpoint on your compute. Live QPS and latency in the console, quotas per workspace, lineage from every prediction back to the training data.

⬢ Inference runs in your region. Prompts and predictions never leave it.

serve & call
# promote v7 to a live endpoint
polnor models serve churn-v4 --version 7 --name churn-prod

# call it
curl -s https://api.polnor.net/api/v1/endpoints/churn-prod/invoke \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"inputs": [[0.12, 3, 41.5]]}'

# → {"predictions":[0.91], "latency_ms": 9}

Set a course

Request a
demo.

See your own Iceberg tables, warehouses and notebooks running on your European cloud, usually within a week.

hello@polnor.net · OVHcloud GRA9, France 🇫🇷

Opens your mail client, no data leaves your browser until you hit send.