xlml/utils/mantaray.py (55 lines of code) (raw):
# Copyright 2023 Google LLC
#
# 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.
"""Utilities to run workloads with mantaray."""
import subprocess
import tempfile
from airflow.decorators import task
from airflow.hooks.subprocess import SubprocessHook
from dags import composer_env
MANTARAY_G3_GS_BUCKET = "gs://borgcron/cmcs-benchmark-automation/mantaray"
MAXLIBRARY_G3_GS_BUCKET = "gs://borgcron/maxlibrary"
def load_file_from_gcs(gs_file_path):
"""Loads a file from a Google Cloud Storage bucket."""
with tempfile.TemporaryDirectory() as tmpdir:
subprocess.run(
f"gsutil -m cp {gs_file_path} {tmpdir}/file",
check=False,
shell=True,
)
with open(f"{tmpdir}/file", "r") as f:
return f.read()
@task
def run_workload(
workload_file_name: str,
mantaray_gcs_bucket: str = MANTARAY_G3_GS_BUCKET,
maxlibrary_gcs_bucket: str = MAXLIBRARY_G3_GS_BUCKET,
):
with tempfile.TemporaryDirectory() as tmpdir:
cmds = (
f"cd {tmpdir}",
f"gsutil -m cp -r {mantaray_gcs_bucket} .",
"sudo apt-get update && sudo apt-get install -y rsync", # Install rsync
f"cd mantaray && pip install -e .",
# Install maxlibrary
f"gsutil -m cp -r {maxlibrary_gcs_bucket} ./xlml_jobs",
f"pip install -e ./xlml_jobs/maxlibrary",
f"python xlml_jobs/{workload_file_name}", # Run the workload
)
hook = SubprocessHook()
result = hook.run_command(
["bash", "-c", ";".join(cmds)],
)
assert (
result.exit_code == 0
), f"Mantaray command failed with code {result.exit_code}"
@task
def build_docker_image():
with tempfile.TemporaryDirectory() as tmpdir:
cmds = (
f"cd {tmpdir}",
f"gsutil -m cp -r {MANTARAY_G3_GS_BUCKET} .",
"cd mantaray",
"gcloud builds submit --config docker/cloudbuild.yaml --substitutions _DATE=$(date +%Y%m%d)", # Create nightly docker image
)
hook = SubprocessHook()
result = hook.run_command(
["bash", "-c", ";".join(cmds)],
)
assert (
result.exit_code == 0
), f"Mantaray command failed with code {result.exit_code}"