Skip to content

feat(gpu): OVHcloud AI Training as a governed engine (server-side)#629

Merged
jqueguiner merged 3 commits into
mainfrom
feat/ovh-ai-training
Jul 23, 2026
Merged

feat(gpu): OVHcloud AI Training as a governed engine (server-side)#629
jqueguiner merged 3 commits into
mainfrom
feat/ovh-ai-training

Conversation

@jqueguiner

Copy link
Copy Markdown
Owner

Adds OVHcloud AI Training (managed GPU batch jobs) as --provider ovhai, completing the "no provider token on the client" model for OVH's AI service.

Governed, server-side

openrunner gpu run --provider ovhai --image <img> --gpu-count N "<cmd>" → the API signs the OVH call with the org's stored ovhcloud credential (application_key/secret/consumer_key) and submits /cloud/project/{sid}/ai/job. The OVH keys never reach the client. COMMAND runs in the image on N GPUs; the SDK polls /gpu/ai-training/{id} and streams status+logs; the job auto-stops on exit.

No OVH object-storage --volume mounts — data comes from OpenRunner (datasets/artifacts), per design.

Changes

  • gpu_provision: ovh_training_create/status/logs/terminate (reuse the existing OVH signed-API helpers) + POST /gpu/ai-training/run + GET /gpu/ai-training/{id}.
  • SDK: ovh_training_run/status, run_ovh_training_sync, gpu run --provider ovhai. Guidance updated. Bumps 2.40.0.
  • Tests (mocked OVH): create body (no volumes), state mapping, log join, SDK submit+stream.

⚠️ Not deployed

The OVH /ai/job request/response shape follows the OVH API but I could not smoke-test it against a live OVH account (no keys here). Needs a live verification (field names: id, status.state, resources.gpu, /log, /kill) before enabling in prod. Opening as review-only.

🤖 Generated with Claude Code

… client keys)

Adds OVH AI Training (managed GPU batch jobs) as `--provider ovhai`. Governed:
the API submits the OVH job SERVER-SIDE via the signed OVH API using the org's
stored `ovhcloud` credential — the application/secret/consumer keys never reach
the client. COMMAND runs in --image on --gpu-count GPUs; the SDK polls + streams
status/logs; the job auto-stops when the command exits.

- API: gpu_provision.ovh_training_create/status/logs/terminate (reuses the
  existing OVH signed-API helpers) + POST /gpu/ai-training/run + GET
  /gpu/ai-training/{id}.
- SDK: GpuAPIClient.ovh_training_run/status, run_ovh_training_sync, `gpu run
  --provider ovhai` routing. Guidance updated (no OVH volumes — data via
  OpenRunner). Bumps 2.40.0.
- Tests (mocked OVH): job create body (no volumes), state mapping, log join, SDK
  submit+stream.

NOTE: NOT deployed — the OVH /ai/job schema needs a live-account smoke test first.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jqueguiner and others added 2 commits July 23, 2026 18:17
The /ai-training endpoints were declared on the /gpu-prefixed router as
'/gpu/ai-training/*' (would register at /gpu/gpu/...); corrected to
'/ai-training/*'. Rebumps to 2.40.1 since #630 shipped 2.40.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts:
#	CHANGELOG.md
#	sdk/openrunner/__init__.py
#	sdk/openrunner/gpu/runner.py
#	sdk/pyproject.toml
#	src/api/app/api/v1/gpu.py
@jqueguiner
jqueguiner merged commit 73b9823 into main Jul 23, 2026
10 checks passed
@jqueguiner
jqueguiner deleted the feat/ovh-ai-training branch July 23, 2026 19:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant