mirror of
https://github.com/hanzo-ml/trainer.git
synced 2026-09-24 00:31:34 +00:00
* chore(scripts): add copyright boilerplate verification system Signed-off-by: tariq-hasan <[email protected]> * chore(ci): add boilerplate verification to CI pipeline Signed-off-by: tariq-hasan <[email protected]> * chore: regenerate files with year-less copyright headers Signed-off-by: tariq-hasan <[email protected]> * refactor(boilerplate): simplify verification logic Signed-off-by: tariq-hasan <[email protected]> * chore(boilerplate): add missing copyright headers Signed-off-by: tariq-hasan <[email protected]> * ci(boilerplate): move verifier to code-quality workflow and run unit tests Signed-off-by: tariq-hasan <[email protected]> * feat(boilerplate): accept license headers with any year and remove year validation logic Signed-off-by: tariq-hasan <[email protected]> * feat(boilerplate): add copyright headers to generated Python API Signed-off-by: tariq-hasan <[email protected]> * refactor(boilerplate): use block-comment header for generated Go files Signed-off-by: tariq-hasan <[email protected]> * feat(boilerplate): verify copyright headers in Rust files Signed-off-by: tariq-hasan <[email protected]> --------- Signed-off-by: tariq-hasan <[email protected]>
68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
# Copyright The Kubeflow Authors.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""
|
|
status_update.py
|
|
|
|
E2E test script for TrainJob that updates the runtime status using the status server endpoint.
|
|
|
|
This script validates that the runtime status endpoint can be called from within
|
|
a training container. It reads the status server URL, CA certificate, and service
|
|
account token from environment variables injected by the Status plugin, then sends
|
|
a single status update with test metrics to verify the TrainJob status is updated.
|
|
|
|
Environment variables required:
|
|
- KUBEFLOW_TRAINER_SERVER_URL: HTTPS URL for the status server endpoint
|
|
- KUBEFLOW_TRAINER_SERVER_CA_CERT: Path to CA certificate file for TLS verification
|
|
- KUBEFLOW_TRAINER_SERVER_TOKEN: Path to service account token file for authentication
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import ssl
|
|
from datetime import datetime, timezone
|
|
from urllib import error, request
|
|
|
|
url = os.environ["KUBEFLOW_TRAINER_SERVER_URL"]
|
|
ca_file = os.environ["KUBEFLOW_TRAINER_SERVER_CA_CERT"]
|
|
token = open(os.environ["KUBEFLOW_TRAINER_SERVER_TOKEN"]).read().strip()
|
|
ssl_context = ssl.create_default_context(cafile=ca_file)
|
|
|
|
# Send a single status update
|
|
payload = {
|
|
"trainerStatus": {
|
|
"progressPercentage": 42,
|
|
"estimatedRemainingSeconds": 120,
|
|
"metrics": [
|
|
{"name": "loss", "value": "0.123"},
|
|
{"name": "accuracy", "value": "0.95"},
|
|
],
|
|
"lastUpdatedTime": datetime.now(timezone.utc).isoformat(),
|
|
}
|
|
}
|
|
data = json.dumps(payload)
|
|
req = request.Request(
|
|
url, data=data.encode("utf-8"), headers={"Authorization": f"Bearer {token}"}
|
|
)
|
|
|
|
try:
|
|
resp = request.urlopen(req, context=ssl_context)
|
|
except error.HTTPError as ex:
|
|
body = ex.read().decode("utf-8", errors="replace")
|
|
print(f"Failed to update trainer status. {ex} {body}")
|
|
raise
|
|
else:
|
|
body = resp.read().decode("utf-8")
|
|
print(f"Success updating trainer status: {resp.getcode()} {body}")
|